精简ABP的模块依赖
ABP的模块非常方便我们扩展自己的或使用ABP提供的模块功能,对于ABP自身提供的模块间的依赖关系想一探究竟,并且试着把不必要的模块拆掉,找到那部分核心模块。本次使用的是AspNetBoilerplate。
源码下载
从Github下载ABP源码后,进入src文件夹,提供的大部分模块都在此中。很多工具也经ABP封装,个人认为是方便了集成使用且融入到ABP这个框架。
src文件夹中的类库有几种类型如.net standard(为了兼容.net framework)、.net 5 、.net framework的。
我的想法是最小的模块引用,因此按照如下两个条件移除
移除.net framework的,只专注于.net core所需要的。
移除Zero模块。
精简模块
整理后也就是剩下这部分,这样看仍然感觉有很多模块,但对于其中大部分来讲更多的是将一些工具封装了下,比如从SignalR,AutoMapper,Log4Net,Dapper,EFCore等等。
通过整理这部分类库间的依赖关系,(此图中去掉了Dapper、NHibernate、MemoryDB和MongoDb),如此一来分类便清晰许多,一眼便可以识别出Abp这一核心模块。哪些模块的提供的功能是什么,这样也方便查看。
我们再来建立一个项目来直接对该部分类库引用,而不是走Nuget包的方式。先依赖需要的最基本的模块,比如Abp、Abp.WebCommon和Abp.AspNetCore等几个模块,能够保障最基本的请求功能,甚至于读取数据库的ORM工具都不纳入进来。
依赖核心模块
此处将Log4Net作为需要的模块纳入进来,因为Abp中部分地方记录日志时候需要相应的实现类,当然也可以使用其他日志组件如NLog等,但需要实现Abp中封装好的抽象类,可参考如下链接:https://www.cnblogs.com/donaldtdz/p/8213440.html
新建一个空白解决方案AbpIntegrationDemo.sln
建立一个module文件夹用于放置上述最基本模块。
建立一个src文件夹中用于搭建分层结构。
对于src中的每一层所依赖的项目按照层次关系及依赖关系,其中核心层Domain依赖Abp模块,Application和Infrastructure都依赖核心层也就都对Abp模块有了依赖关系了。
如此一来,最为基本的依赖便完成了,各层内增加相应的Module,按照Abp模块化构建方式将这些模块贯穿起来。比如AbpIntegrationDemo.Admin,将依赖的模块,需要注入的、配置的东西加入进来,此处部分直接从Abp start up中搬过来的,还可以再精简一下,部分内容目前是没有用到的。
[DependsOn(typeof(AbpIntegrationApplicationModule),typeof(AbpIntegrationInfrastructureModule),typeof(AbpAspNetCoreModule))]
public class AbpIntegrationAdminModule : AbpModule
{private readonly IWebHostEnvironment _env;private readonly IConfiguration _appConfiguration;public AbpIntegrationAdminModule(IWebHostEnvironment env, IConfiguration appConfiguration){_env = env;_appConfiguration = appConfiguration;}public override void PreInitialize(){Configuration.DefaultNameOrConnectionString = _appConfiguration.GetConnectionString(AbpIntegrationDomainConsts.ConnectionStringName);Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = false;}public override void Initialize(){IocManager.RegisterAssemblyByConvention(typeof(AbpIntegrationAdminModule).GetAssembly());}public override void PostInitialize(){IocManager.Resolve<applicationpartmanager>().AddApplicationPartsIfNotAddedBefore(typeof(AbpIntegrationAdminModule).Assembly);}public override void Shutdown(){base.Shutdown();}
}
在此基础上,按照需要的模块,如EF Core、Redis、Hangfire、AutoMapper等等,也只需要引用进来了,至少到现有地步,对于Abp模块的依赖及最为核心的模块应该是清楚了,而对于看到很多人说Abp重的说法,个人感觉是不是看到依赖的模块太多而有种复杂的感觉,实则有很多是工具模块,即使不使用Abp,实际开发中也会使用进来。
https://gitee.com/530521314/Partner.TreasureChest/tree/master/AbpIntegrateDemo
2021-08-19,望技术有成后能回来看见自己的脚步
精简ABP的模块依赖相关推荐
- ABP理论学习之依赖注入
返回总目录 本篇目录 什么是依赖注入 传统方式产生的问题 解决办法 依赖注入框架 ABP中的依赖注入基础设施 注册 解析 其他 ASP.NET MVC和ASP.NET Web API集成 最后提示 什 ...
- ABP中的依赖注入思想
在充分理解整个ABP系统架构之前首先必须充分了解ABP中最重要的依赖注入思想,在后面会具体举出一些实例来帮助你充分了解ABP中的依赖注入思想,在了解这个之前我们首先来看看什么是依赖注入?来看看维基百科 ...
- 编译内核指定模块,筛选当前模块依赖的组件
关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中. 为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存 ...
- js模块化之模块依赖处理
javascript中模块依赖处理 在javascript模块化处理模式,为处理模块间的依赖,多个js库提出了各自的模块依赖处理模式.而且功能越来越复杂,模块文件越来越多,我们需要时刻小心模块之间的依 ...
- idea 创建多模块依赖Maven项目
转载地址: http://www.cnblogs.com/tibit/p/6185704.html idea 创建多模块依赖Maven项目 本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自 ...
- 字节码技术在模块依赖分析中的应用
背景 近年来,随着手机业务的快速发展,为满足手机端用户诉求和业务功能的迅速增长,移动端的技术架构也从单一的大工程应用,逐步向模块化.组件化方向发展.以高德地图为例,Android 端的代码已突破百万行 ...
- vue项目查看构建后项目报告,项目个模块依赖占比比例情况
vue项目查看构建后项目报告,项目个模块依赖占比比例情况 npm run build --report or "report": "vue-cli-service bui ...
- gradle 不支持多级子模块_解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。...
最近需要初始化一个SpringBoot新项目遇到一个问题就是:项目中有多个子模块,使用gradle依赖管理成功. 项目结构如下: project --module1 --module2 我的modul ...
- android添加工程依赖工程,Android Studio为项目加上模块依赖的图文方法
一些用户们在使用Android Studio的时候,不是很熟悉其中是怎么为项目加上模块依赖?今日这篇文章就带来了Android Studio为项目加上模块依赖的图文方法. Android Studio ...
最新文章
- 大学学了java可以做点什么_学习Java的,大学毕业一般从事些什么工作?
- No IP specified. Please specify IP with ‘objects’
- placeholder在不同浏览器下的表现及兼容方法
- 算法 n个数字形成的圆圈中循环删除第m个数字 C++
- UA OPTI570 量子力学18 量子谐振子基础
- 拆解19元的儿童电话手表,要是能二次开发就好了
- 阿里云网盘开放申请!非会员下载 10MB/s!
- 系统属性的JDK 12 Javadoc标记
- nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]
- 企业为什么要做SEO,它的重要性有哪些?
- Visual Studio Code 1.42 发布
- 注解-@Conditional的使用
- python django项目创建步骤
- 铁路订票系统的简单设计
- java md5加密与解密_Java——MD5加密与解密
- linux下打开.mpp文件(微软project)
- Vue - @click.prevent
- Windows下进行域名映射并配置Nginx反向代理
- php面试兴趣爱好,简历中的兴趣爱好该怎么写?
- 非虚无,落实处的积极心理学小科普(Introduction to Positive Psychology)