深入淺出-模塊開發

介紹

ABP本身是一個包含許多nuget包的模塊化框架。它還提供了一個完整的基礎架構來開發你自己的具有實體、服務、數據庫集成、 API、UI組件等等功能的應用程序模塊。

模塊類

每個模塊都應該定義一個模塊類.定義模塊類的最簡單方法是創建一個派生自AbpModule的類,如下所示:

public class BlogModule : AbpModule
{
            
}

配置依賴注入和其他模塊

ConfigureServices方法

ConfigureServices是將你的服務添加到依賴注入系統並配置其他模塊的主要方法。例:

public class BlogModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //...
    }
}

你可以按照Microsoft的文檔中的說明逐個註冊依賴項.但ABP有一個依照約定的依賴註冊系統,可以自動註冊程序集中的所有服務。有關依賴項注入系統的更多信息,請參閱依賴項注入文檔。

你也可以通過這種方式配置其他服務和模塊。例:

public class BlogModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        //爲應用程序配置默認的連接字符串
        Configure<AbpDbConnectionOptions>(options =>
        {
            options.ConnectionStrings.Default = "......";
        });
    }
}

有關配置系統的更多信息,請參閱配置(TODO:link)文檔。

配置服務前和後

AbpModule類還定義了PreConfigureServicesPostConfigureServices方法用來在ConfigureServices之前或之後覆蓋和編寫你的代碼.請注意,在這些方法中編寫的代碼將在所有其他模塊的ConfigureServices方法之前/之後執行。

應用程序初始化

一旦配置了所有模塊的所有服務,應用程序就會通過初始化所有模塊來啓動.在此階段,你可以從IServiceProvider中獲取服務,因爲這時它已準備就緒且可用。

OnApplicationInitialization方法

你可以在啓動應用程序時覆蓋OnApplicationInitialization方法來執行代碼。例:

public class BlogModule : AbpModule
{
    //...

    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        var myService = context.ServiceProvider.GetService<MyService>();
        myService.DoSomething();
    }
}

OnApplicationInitialization通常由啓動模塊用於構建 ASP.NET Core 應用程序的中間件管道。例:

[DependsOn(typeof(AbpAspNetCoreMvcModule))]
public class AppModule : AbpModule
{
    //...

    public override void OnApplicationInitialization(ApplicationInitializationContext context)
    {
        var app = context.GetApplicationBuilder();
        var env = context.GetEnvironment();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvcWithDefaultRoute();
    }
}

如果模塊需要,你還可以執行啓動邏輯

應用程序初始化前和後

AbpModule類還定義了OnPreApplicationInitializationOnPostApplicationInitialization方法用來在OnApplicationInitialization之前或之後覆蓋和編寫你的代碼。請注意,在這些方法中編寫的代碼將在所有其他模塊的OnApplicationInitialization方法之前/之後執行。

應用程序關閉

最後,如果要在應用程序關閉時執行某些代碼,你可以重寫OnApplicationShutdown方法。

模塊依賴

在模塊化應用程序中,一個模塊依賴於另一個或幾個模塊並不罕見.如果一個Abp模塊依賴於另一個模塊,它必須聲明[DependsOn]特性,如下所示:

[DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))]
public class BlogModule
{
    //...
}

你可以根據需要使用多個 DependsOn特性或將多個模塊類型傳遞給單個DependsOn特性。

依賴模塊可能依賴於另一個模塊,但你只需要定義直接依賴項。ABP在啓動時會調查應用程序的依賴關係,並以正確的順序初始化/關閉模塊。

框架模塊 vs 應用程序模塊

模塊分爲兩種類型. 這兩種類型並沒有任何結構上的區別,只是按功能和用途分類:

  • 框架模塊:這些是框架的核心模塊 如緩存, 郵件, 主題, 安全, 序列化, 驗證, EF Core集成, MongoDB集成... 等. 它們沒有應用/業務功能,它們提供了日常開發經常用到的通用基礎設施,集成和抽象。
  • 應用程序模塊:這些模塊實現了 特定的應用/業務功能 像博客, 文檔管理, 身份管理, 租戶管理... 等等. 它們通常有自己的實體,服務,API和UI組件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章