網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
簡(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è)模塊, 常見的是暴露模塊對(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() ); //... }
常見的方法
在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)行加載, 這很常見, 例如機(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"); });
原文鏈接:https://www.cnblogs.com/zh7791/p/15502528.html
相關(guān)推薦
- 2023-05-10 Numpy中np.dot與np.matmul的區(qū)別詳解_python
- 2023-04-19 vscode配置ESlint
- 2022-04-20 Android實(shí)現(xiàn)左側(cè)滑動(dòng)菜單_Android
- 2022-02-07 出現(xiàn)報(bào)錯(cuò)nginx: [emerg] unknown directive nginx.htacces
- 2022-09-15 python接口測(cè)試對(duì)修改密碼接口進(jìn)行壓測(cè)_python
- 2022-12-12 Flutter手機(jī)權(quán)限檢查與申請(qǐng)實(shí)現(xiàn)方法詳解_Android
- 2022-12-08 React源碼state計(jì)算流程和優(yōu)先級(jí)實(shí)例解析_React
- 2022-12-02 Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支