ABP理論學習之模塊系統


返回總目錄


本篇目錄

模塊介紹###

ABP提供了構建模塊並將這些模塊組合起來創建應用的基礎設施。一個模塊可以依賴另一個模塊。一般來說,一個程序集可以認為是一個模塊。一個模塊是由一個派生了AbpModule的類定義的。比如說我們在開發一個可以用在不同的應用中的博客模塊。最簡單的模塊定義如下:

public class MyBlogApplicationModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

ABP掃描所有的程序集,並找出所有的派生自AbpModule基類的類。如果你創建了不止一個程序集的應用,那么建議為每個程序集創建一個模塊定義。

生命周期事件###

ABP在應用啟動和關閉的時候會調用一些特定的模塊方法。你可以重寫這些方法來執行特定的任務。

ABP按照依賴的順序調用這些方法。如果模塊A依賴於模塊B,那么模塊B在模塊A之前初始化。方法執行的正確順序是:PreInitialize-B, PreInitialize-A, Initialize-B, Initialize-A, PostInitialize-B and PostInitialize-A。這對於所有的依賴圖都是成立的。Shutdown方法也是類似的,但順序相反。

PreInitialize

該方法會在應用啟動時首先調用。你可以在該方法里面寫一些特定的代碼,這些代碼會在依賴注入注冊之前執行。比如,如果你創建了一個傳統的注冊類,那么你應該把它在這里注冊(使用locManager.AddConventionalRegister方法)。你也可以注冊到IOC容器的事件...等等。

Initialize

該方法通常是依賴注入注冊的地方。一般使用IocManager.RegisterAssemblyByConvention方法完成。如果你想要定義自定義的依賴注冊,請看后面的依賴注入文檔。

PostInitialize

該方法在應用啟動的最后調用。在這里可以安全地解析一個依賴。

Shutdown

該方法在應用關閉的時候調用。

模塊依賴###

一個模塊可以獨立於另一個模塊。ABP會自動地嘗試解析這些依賴,但是建議通過重寫GetDependencies方法來顯式聲明依賴,正如下面那樣:

[DependsOn(typeof(MyBlogCoreModule))]
public class MyBlogApplicationModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

這樣,我們聲明ABP:MyBlogApplicationModule依賴於MyBlogCoreModule,因而該核心模塊MyBlogCoreModule會在應用模塊MyBlogApplicationModule之前進行初始化。

自定義模塊方法###

你的模塊也可以有一些自定義的方法,這些方法可以被依賴於該模塊的其他模塊所使用。假設MyModule2依賴於MyModule1,且MyModule2想要在PreInitialize事件中調用一個MyModule1的方法。

public class MyModule1 : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }

    public void MyModuleMethod1()
    {
        //這是該模塊的自定義方法
    }
}

[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());
    }
}

這里,我們通過構造函數將MyModule1z注入到了MyModule2,因此MyModule2可以調用MyModule1的自定義方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM