本節目錄 介紹模塊 生命周期事件 PreInitialize Initialize PostInitialize Shutdown 模塊依賴 自定義模塊方法 介紹模塊 ABP提供基礎設施讓我們創建application,就是創建和組合使用modules. 1個module可以依賴其他的module,
本節目錄
- 介紹模塊
- 生命周期事件
- 模塊依賴
- 自定義模塊方法
介紹模塊
ABP提供基礎設施讓我們創建application,就是創建和組合使用modules.
1個module可以依賴其他的module,通常1個程式集可以做為1個module.
1個module由1個繼承AbpModule來定義.
我們可以開發1個博客module,用在不同的applications.
最簡單的定義如下:
public class MyBlogApplicationModule : AbpModule { public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
ABP掃描所有的程式集,找到繼承AbpModule 所有類,建議每個程式集定義1個Module.
生命周期事件
ABP在application啟動和結束的時候會調用modules的特定方法.你可以重寫這些方法,以執行一些特定的任務.
ABP會根據依賴順序調用這些方法,如果module A 依賴module B,則方法執行順序為:
PreInitialize-B, PreInitialize-A, Initialize-B, Initialize-A, PostInitialize-B and PostInitialize-A
Shutdown方法則相反順序.
PreInitialize
該方法在程式啟動的時候被調用,會在依賴註入註冊之前執行.可以在此處註冊一些類和事件到IoC 容器中.
Initialize
該方法是在dependency injection註冊的位置.通常,會調用IocManager.RegisterAssemblyByConvention方法.如果你想自定義依賴註冊,可以查看相關文檔.
PostInitialize
該方法會在啟動時的最後調用,這裡可以安全的使用容器解析對象.
Shutdown
該方法會在應用關閉的時候調
模塊依賴
1個module可以依賴其他的module,ABP會自動解析這些依賴.
[DependsOn(typeof(MyBlogCoreModule))] public class MyBlogApplicationModule : AbpModule { public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
由於我們的定義,core module會在application module之前先初始化.
自定義模塊方法
模塊也可以為其他模塊提供自定義方法,假設MyModule2 依賴MyModule1,MyModule2希望在PreInit方法中調用MyModule1的方法.
public class MyModule1 : AbpModule { public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } public void MyModuleMethod1() { //this is a custom method of this module } } [DependsOn(typeof(MyModule1))] public class MyModule2 : AbpModule { private readonly MyModule1 _myModule1; public MyModule2(MyModule1 myModule1) { _myModule1 = myModule1; } public override void PreInitialize() { _myModule1.MyModuleMethod1(); //Call MyModule1's method } public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
這裡,我們通過構造函數註入的方式將MyModule1註入進來,所以MyModule2 可以調用其方法.