日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

精简ABP的模块依赖

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精简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的模块依赖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。