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的模块依赖相关推荐

  1. ABP理论学习之依赖注入

    返回总目录 本篇目录 什么是依赖注入 传统方式产生的问题 解决办法 依赖注入框架 ABP中的依赖注入基础设施 注册 解析 其他 ASP.NET MVC和ASP.NET Web API集成 最后提示 什 ...

  2. ABP中的依赖注入思想

    在充分理解整个ABP系统架构之前首先必须充分了解ABP中最重要的依赖注入思想,在后面会具体举出一些实例来帮助你充分了解ABP中的依赖注入思想,在了解这个之前我们首先来看看什么是依赖注入?来看看维基百科 ...

  3. 编译内核指定模块,筛选当前模块依赖的组件

    关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中. 为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存 ...

  4. js模块化之模块依赖处理

    javascript中模块依赖处理 在javascript模块化处理模式,为处理模块间的依赖,多个js库提出了各自的模块依赖处理模式.而且功能越来越复杂,模块文件越来越多,我们需要时刻小心模块之间的依 ...

  5. idea 创建多模块依赖Maven项目

    转载地址: http://www.cnblogs.com/tibit/p/6185704.html idea 创建多模块依赖Maven项目 本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自 ...

  6. 字节码技术在模块依赖分析中的应用

    背景 近年来,随着手机业务的快速发展,为满足手机端用户诉求和业务功能的迅速增长,移动端的技术架构也从单一的大工程应用,逐步向模块化.组件化方向发展.以高德地图为例,Android 端的代码已突破百万行 ...

  7. vue项目查看构建后项目报告,项目个模块依赖占比比例情况

    vue项目查看构建后项目报告,项目个模块依赖占比比例情况 npm run build --report or "report": "vue-cli-service bui ...

  8. gradle 不支持多级子模块_解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。...

    最近需要初始化一个SpringBoot新项目遇到一个问题就是:项目中有多个子模块,使用gradle依赖管理成功. 项目结构如下: project --module1 --module2 我的modul ...

  9. android添加工程依赖工程,Android Studio为项目加上模块依赖的图文方法

    一些用户们在使用Android Studio的时候,不是很熟悉其中是怎么为项目加上模块依赖?今日这篇文章就带来了Android Studio为项目加上模块依赖的图文方法. Android Studio ...

最新文章

  1. 大学学了java可以做点什么_学习Java的,大学毕业一般从事些什么工作?
  2. No IP specified. Please specify IP with ‘objects’
  3. placeholder在不同浏览器下的表现及兼容方法
  4. 算法 n个数字形成的圆圈中循环删除第m个数字 C++
  5. UA OPTI570 量子力学18 量子谐振子基础
  6. 拆解19元的儿童电话手表,要是能二次开发就好了
  7. 阿里云网盘开放申请!非会员下载 10MB/s!
  8. 系统属性的JDK 12 Javadoc标记
  9. nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]
  10. 企业为什么要做SEO,它的重要性有哪些?
  11. Visual Studio Code 1.42 发布
  12. 注解-@Conditional的使用
  13. python django项目创建步骤
  14. 铁路订票系统的简单设计
  15. java md5加密与解密_Java——MD5加密与解密
  16. linux下打开.mpp文件(微软project)
  17. Vue - @click.prevent
  18. Windows下进行域名映射并配置Nginx反向代理
  19. php面试兴趣爱好,简历中的兴趣爱好该怎么写?
  20. 非虚无,落实处的积极心理学小科普(Introduction to Positive Psychology)

热门文章

  1. Shell 脚本——测试命令
  2. 搭建基于虚拟账号的电子邮件系统
  3. React绑定事件处理函数this的几种方法
  4. java servlet练习测试
  5. 程序一启动检查网络,如果没有网络就退出程序
  6. hdu 1466 计算直线的交点数 递推
  7. LOOP WITH CONTROL 用法
  8. php编译 ftp,无需重新编译php加入ftp扩展的解决方法
  9. 如何在一小时内更新100篇文章?-Evernote Sync插件介绍
  10. [There will be more story......]