ASP.NET Core Zero模塊系統(tǒng)講解
簡(jiǎn)介
在ABP中, 模板的定義就是一個(gè)類, 只需要繼承 AbpModule, 該類可以通過(guò)nuget包搜索 ABP 安裝。
下面演示在應(yīng)用程序或類庫(kù)中, 定義一個(gè)模塊:
public class ApplicationModule : AbpModule { public override void Initialize() { IocManager.RegisterAssemblyByConvention(typeof(ApplicationModule).GetAssembly()); } }
說(shuō)明: 關(guān)于IocManager.RegisterAssemblyByConvention的作用, 則是將當(dāng)前程序集模塊注冊(cè)到容器當(dāng)中, 作為一個(gè)模塊, 常見(jiàn)的是暴露模塊對(duì)應(yīng)的服務(wù),
而其中所有的服務(wù), 都是按照聲明周期而聲明, 例如: ITransientDependency ,ISingletonDependency。
下面展示了IocManager.RegisterAssemblyByConvention 執(zhí)行的部分細(xì)節(jié):
public void RegisterAssembly(IConventionalRegistrationContext context) { //Transient context.IocManager.IocContainer.Register( Classes.FromAssembly(context.Assembly) .IncludeNonPublicTypes() .BasedOn<ITransientDependency>() .If(type => !type.GetTypeInfo().IsGenericTypeDefinition) .WithService.Self() .WithService.DefaultInterfaces() .LifestyleTransient() ); //Singleton context.IocManager.IocContainer.Register( Classes.FromAssembly(context.Assembly) .IncludeNonPublicTypes() .BasedOn<ISingletonDependency>() .If(type => !type.GetTypeInfo().IsGenericTypeDefinition) .WithService.Self() .WithService.DefaultInterfaces() .LifestyleSingleton() ); //... }
常見(jiàn)的方法
在AbpModule中, 定義了幾組方法, 分別在應(yīng)用程序模塊加載的前后進(jìn)行, 如下:
public virtual void Initialize(); public virtual void PostInitialize(); public virtual void PreInitialize(); public virtual void Shutdown();
- Initialize : 通常, 這里用于注冊(cè)程序集依賴選項(xiàng)
- PostInitialize : 初始化最后調(diào)用
- PreInitialize : 初始化之前調(diào)用
- Shutdown : 當(dāng)應(yīng)用程序關(guān)閉時(shí)調(diào)用
模塊依賴
通常來(lái)講, 一個(gè)模塊往往依賴與一個(gè)或者多個(gè)模塊, 這里, 也涉及到了模塊的加載生命周期。
假設(shè): 模塊A依賴于模塊B, 那么意味著模塊B會(huì)先于模塊A初始化。
關(guān)于模塊之間的依賴, 則可以通過(guò)特性的方式 DependsOn 為模塊顯示聲明, 如下所示:
[DependsOn(typeof(BModule))] public class AModule : AbpModule { public override void Initialize() { //... } }
模塊加載
任何模塊都依賴于啟動(dòng)模塊進(jìn)行加載, 這很常見(jiàn), 例如機(jī)箱中的各個(gè)模塊: 內(nèi)存、硬盤、顯卡、電源。 都需要通電的過(guò)程, 讓他們進(jìn)行整個(gè)啟動(dòng)過(guò)程。
Abp 則依賴于 AbpBootstrapper 來(lái)進(jìn)行調(diào)用初始化, 可以通過(guò) Initialize 方法加載。
public static class ApplicationBootstrapper { public static AbpBootstrapper AbpBootstrapper { get; private set; } public static void Init(){ //... AbpBootstrapper.Initialize(); } }
同樣, 模塊也可以讀取指定文件夾路徑的方式進(jìn)行加載模塊, 如下所示:
services.AddAbp<MyStartupModule>(options => { options.PlugInSources.Add(new FolderPlugInSource(@"C:\MyPlugIns")); }); or services.AddAbp<MyStartupModule>(options => { options.PlugInSources.AddFolder(@"C:\MyPlugIns"); });
到此這篇關(guān)于ASP.NET Core Zero模塊系統(tǒng)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core Zero使用Power Tool工具
- ASP.Net?Core?MVC基礎(chǔ)系列之環(huán)境設(shè)置
- ASP.Net Core MVC基礎(chǔ)系列之中間件
- ASP.Net Core MVC基礎(chǔ)系列之服務(wù)注冊(cè)和管道
- ASP.Net?Core?MVC基礎(chǔ)系列之獲取配置信息
- ASP.Net?Core?MVC基礎(chǔ)系列之項(xiàng)目創(chuàng)建
- ASP.NET?Core命令行界面CLI用法
- ASP.NET Core基礎(chǔ)之異常中間件
- ASP.NET?Core中的wwwroot文件夾
- ASP.NET Core基礎(chǔ)之請(qǐng)求處理管道
- ASP.NET Core基礎(chǔ)之中間件
相關(guān)文章
.NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法
這篇文章主要介紹了.net?lambda表達(dá)式合并問(wèn)題,解決方法是自己構(gòu)造一個(gè)新的表達(dá)式,構(gòu)造表達(dá)式需要用到expression類,本文結(jié)合實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2022-10-10Entity Framework Core更新時(shí)間映射
這篇文章介紹了Entity Framework Core更新時(shí)間映射的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03asp.net 2.0多語(yǔ)言網(wǎng)站解決方法
asp.net 2.0中的App_GlobalResources可以用來(lái)解決本地化的問(wèn)題,程序會(huì)根據(jù)瀏覽器的語(yǔ)言首選項(xiàng)自動(dòng)判斷顯示出本地化的界面。2008-09-09vb 中的MD5加密在asp.net中的實(shí)現(xiàn)
給定標(biāo)識(shí)哈希類型的密碼和字符串,該例程產(chǎn)生一個(gè)適合存儲(chǔ)在配置文件中的哈希密碼,感興趣的朋友可以參考下本文2013-04-04asp.net下使用AjaxPro實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)代碼
本文展示了如何利用AjaxPro與服務(wù)器交互,并且還展示了在Js中可以直接調(diào)用服務(wù)器返回的集合和直接調(diào)用服務(wù)器上class的屬性2010-10-10c# 操作符?? null coalescing operator
?? "null coalescing" operator 是c#新提供的一個(gè)操作符,這個(gè)操作符提供的功能是判斷左側(cè)的操作數(shù)是否是null,如果是則返回結(jié)果是右側(cè)的操作數(shù);非null則返回左側(cè)的操作數(shù)。2009-06-06如何在.NET Core中為gRPC服務(wù)設(shè)計(jì)消息文件(Proto)
這篇文章主要介紹了如何在.NET Core中為gRPC服務(wù)設(shè)計(jì)消息文件(Proto),幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-05-05ASP.NET中Webservice安全 實(shí)現(xiàn)訪問(wèn)權(quán)限控制
本文主要講解ASP.NET中的Webservice的安全設(shè)置兩種方法,一種基于soapheader,一種基于SoapExtensionAttribute,需要的朋友可以參考下。2016-05-05ASP .NET中執(zhí)行控件(如ImageButton、LinkButton等)命令不刷新頁(yè)面
在操作時(shí),很多時(shí)候希望提交命令之后不刷新頁(yè)面:1、防止頁(yè)面拉動(dòng),2、防止主框架中刷新丟失當(dāng)前運(yùn)行的子界面。2009-03-03