介紹
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
類還定義了PreConfigureServices
和PostConfigureServices
方法用來在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
類還定義了OnPreApplicationInitialization
和OnPostApplicationInitialization
方法用來在OnApplicationInitialization
之前或之後覆蓋和編寫你的代碼。請注意,在這些方法中編寫的代碼將在所有其他模塊的OnApplicationInitialization
方法之前/之後執行。
應用程序關閉
最後,如果要在應用程序關閉時執行某些代碼,你可以重寫OnApplicationShutdown
方法。
模塊依賴
在模塊化應用程序中,一個模塊依賴於另一個或幾個模塊並不罕見.如果一個Abp模塊依賴於另一個模塊,它必須聲明[DependsOn]
特性,如下所示:
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))]
public class BlogModule
{
//...
}
你可以根據需要使用多個 DependsOn
特性或將多個模塊類型傳遞給單個DependsOn
特性。
依賴模塊可能依賴於另一個模塊,但你只需要定義直接依賴項。ABP在啓動時會調查應用程序的依賴關係,並以正確的順序初始化/關閉模塊。
框架模塊 vs 應用程序模塊
模塊分爲兩種類型. 這兩種類型並沒有任何結構上的區別,只是按功能和用途分類:
- 框架模塊:這些是框架的核心模塊 如緩存, 郵件, 主題, 安全, 序列化, 驗證, EF Core集成, MongoDB集成... 等. 它們沒有應用/業務功能,它們提供了日常開發經常用到的通用基礎設施,集成和抽象。
- 應用程序模塊:這些模塊實現了 特定的應用/業務功能 像博客, 文檔管理, 身份管理, 租戶管理... 等等. 它們通常有自己的實體,服務,API和UI組件。