1. 程式人生 > >ABP(現代ASP.NET樣板開發框架)系列之4、ABP模組系統

ABP(現代ASP.NET樣板開發框架)系列之4、ABP模組系統

基於DDD的現代ASP.NET開發框架--ABP系列之4、ABP模組系統

ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。

 
本文由東莞-天道提供翻譯
 

ABP模組系統簡介

ABP框架提供了建立和組裝模組的基礎,一個模組能夠依賴於另一個模組。在通常情況下,一個程式集就可以看成是一個模組。在ABP框架中,一個模組通過一個類來定義,而這個類要繼承自AbpModule

譯者注:如果學習過Orchard的朋友,應該知道module模組的強大了。模組的本質就是可重用性,你可以在任意的地方去呼叫,而且通過實現模組,你寫的模組也可以給別人用。

Assembly程式集:Assembly是一個包含來程式的名稱,版本號,自我描述,檔案關聯關係和檔案位置等資訊的一個集合。最簡單的理解就是:一個你自己寫的類庫生成的dll就可以看做是一個程式集,這個程式集可以包括很多類,類又包括很多方法等。
.net可以通過反射獲取一個程式集中的類以及方法。


下面的例子,我們開發一個可以在多個不同應用中被呼叫MybolgApplication模組,程式碼如下:

public class MyBlogApplicationModule : AbpModule //定義
{
    public override void Initialize() //初始化
{ IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); //這行程式碼的寫法基本上是不變的。它的作用是把當前程式集的特定類或介面註冊到依賴注入容器中。 } }

ABP框架會掃描所有的程式集,並且發現AbpModule類中所有已經匯入的所有類,如果你已經建立了包含多個程式集的應用,對於ABP,我們的建議是為每一個程式集建立一個Module(模組)。


生命期事件

在一個應用中,abp框架呼叫了Module模組的一些指定的方法來進行啟動和關閉模組的操作。我們可以過載這些方法來完成我們自己的任務。

ABP框架通過依賴關係的順序來呼叫這些方法,假如:模組A依賴於模組B,那麼模組B要在模組A之前初始化,模組啟動的方法順序如下:

  1. PreInitialize-B
  2. PreInitialize-A
  3. Initialize-B
  4. Initialize-A
  5. PostInitialize-B
  6. PostInitialize-A

下面是具體方法的說明:


PreInitialize

預初始化:當應用啟動後,第一次會呼叫這個方法。在依賴注入註冊之前,你可以在這個方法中指定自己的特別程式碼。舉個例子吧:假如你建立了一個傳統的登記類,那麼你要先註冊這個類(使用IocManager對登記類進行註冊),你可以註冊事件到IOC容器。等。

Initialize

初始化:在這個方法中一般是來進行依賴注入的註冊,一般我們通過IocManager.RegisterAssemblyByConvention這個方法來實現。如果你想實現自定義的依賴注入,那麼請參考依賴注入的相關文件。

PostInitialize

提交初始化:最後一個方法,這個方法用來解析依賴關係。

Shutdown

關閉:當應用關閉以後,這個方法被呼叫。

模組依賴(Module dependencies)

Abp框架會自動解析模組之間的依賴關係,但是我們還是建議你通過過載GetDependencies方法來明確的宣告依賴關係。

[DependsOn(typeof(MyBlogCoreModule))]//通過註解來定義依賴關係
public class MyBlogApplicationModule : AbpModule
{
    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

例如上面的程式碼,我們就聲明瞭MyBlogApplicationModule和MyBlogCoreModule的依賴關係(通過屬性attribute),MyBlogApplicationModule這個應用模組依賴於MyBlogCoreModule核心模組,並且,MyBlogCoreModule核心模組會在MyBlogApplicationModule模組之前進行初始化。

如何自定義的模組方法

我們自己定義的模組中可能有方法被其他依賴於當前模組的模組呼叫,下面的例子,假設模組2依賴於模組1,並且想在預初始化的時候呼叫模組1的方法。

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(); //呼叫MyModuleMethod1的方法。
    }

    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }
}

就這樣,就把模組1注入到了模組2,因此,模組2就能呼叫模組1的方法了。

陽銘注:

ABP的模組系統與Orchard的模組有類似之處,但還是有比較大的差別。Orchard的框架修改了ASP.NET程式集的預設載入方式(模組的DLL沒有放在Bin資料夾下,是放在WEB專案根資料夾下面的Modules資料夾下),實現了功能模組的熱插拔,而ABP的模組程式集還是放在Bin資料夾下的,沒有實現熱插拔。

希望更多國內的架構師能關注到ABP這個專案,也許這其中有能幫助到您的地方,也許有您的參與,這個專案可以發展得更好。

歡迎加QQ群:

ABP架構設計交流群:134710707 ABP架構設計交流群      ABP架構設計交流2群: 579765441ABP架構設計交流群2

相關推薦

ABP(現代ASP.NET樣板開發框架)系列4ABP模組系統

基於DDD的現代ASP.NET開發框架--ABP系列之4、ABP模組系統 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由東莞-天道提供翻譯  ABP模組系統簡介 ABP框架提供了建立和組裝模組的基礎,一個模組

ABP(現代ASP.NET樣板開發框架)系列10ABP領域層——實體

基於DDD的現代ASP.NET開發框架--ABP系列之10、ABP領域層——實體 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由深圳-Carl提供翻譯 實體是DDD(領域驅動設計)的核心概念之一。Eric Eva

ABP(現代ASP.NET樣板開發框架)系列6ABP依賴注入

基於DDD的現代ASP.NET開發框架--ABP系列之6、ABP依賴注入 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 上海-半冷 提供翻譯 什麼是依賴注入 如果你已經知道依賴注入的概念,建構函式和屬性注入

ABP(現代ASP.NET樣板開發框架)系列9ABP設定管理

基於DDD的現代ASP.NET開發框架--ABP系列之9、ABP設定管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由山東-李偉提供翻譯 介紹 每個應用程式需要儲存一些設定並在應用程式的某個地方使用這些設定。

ABP(現代ASP.NET樣板開發框架)系列2ABP入門教程

基於DDD的現代ASP.NET開發框架--ABP系列之2、ABP入門教程 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列17ABP應用層——引數有效性驗證

基於DDD的現代ASP.NET開發框架--ABP系列之17、ABP應用層——引數有效性驗證 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 應用程式的輸入資料首先應該被檢驗是否有效。輸入的資料能被使用者或其他應用程式提

ABP(現代ASP.NET樣板開發框架)系列16ABP應用層——資料傳輸物件(DTOs)

基於DDD的現代ASP.NET開發框架--ABP系列之16、ABP應用層——資料傳輸物件(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 資料傳輸物件(Data Transfer Objects)用於應用層

ABP(現代ASP.NET樣板開發框架)系列13ABP領域層——資料過濾器(Data filters)

基於DDD的現代ASP.NET開發框架--ABP系列之13、ABP領域層——資料過濾器(Data filters) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 介紹 在資料庫開發中,我們一般會運用軟刪除(soft

ABP(現代ASP.NET樣板開發框架)系列21ABP展現層——Javascript函式庫

基於DDD的現代ASP.NET開發框架--ABP系列之21、ABP展現層——Javascript函式庫 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate的js庫提供了一些讓java

ABP(現代ASP.NET樣板開發框架)系列14ABP領域層——領域事件(Domain events)

基於DDD的現代ASP.NET開發框架--ABP系列之14、ABP領域層——領域事件(Domain events) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在C#中,一個類可以定義其專屬的事件並且其它類可以註冊該事

ABP(現代ASP.NET樣板開發框架)系列5ABP啟動配置

基於DDD的現代ASP.NET開發框架--ABP系列之5、ABP啟動配置 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。  本文由 東莞-天道 提供翻譯 譯者注:在看這一節的內容之前,建議大家先下載module-ze

ABP(現代ASP.NET樣板開發框架)系列3ABP分層架構

基於DDD的現代ASP.NET開發框架--ABP系列之3、ABP分層架構 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 前言 為了減少複雜性和提高程式碼的可重用性,採用分層架構是一種被廣泛接受的技術。為了實現分層的

ABP(現代ASP.NET樣板開發框架)系列19ABP應用層——審計日誌

基於DDD的現代ASP.NET開發框架--ABP系列之19、ABP應用層——審計日誌 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 維基百科定義:審計跟蹤(也稱為稽核日誌)是一個安全相關的時間順序記錄,記錄這些記錄的

ABP(現代ASP.NET樣板開發框架)系列15ABP應用層——應用服務(Application services)

基於DDD的現代ASP.NET開發框架--ABP系列之15、ABP應用層——應用服務(Application services) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 應用服務用於將領

ABP(現代ASP.NET樣板開發框架)系列23ABP展現層——異常處理

基於DDD的現代ASP.NET開發框架--ABP系列之23、ABP展現層——異常處理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 在 web 應用程式中,異常通常是在 MVC Controller actions

ABP(現代ASP.NET樣板開發框架)系列8ABP日誌管理

基於DDD的現代ASP.NET開發框架--ABP系列之8、ABP日誌管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 本文由東莞-天道提供翻譯 Server side(伺服器端) ASP.NET Boilerpla

ABP(現代ASP.NET樣板開發框架)系列1ABP總體介紹

基於DDD的現代ASP.NET開發框架--ABP系列之1、ABP總體介紹 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 ASP.NET Boilerplate是一個用最佳實踐和流行技術開發現代WEB應用程式的新起點,它旨在成為一個通用的

ABP(現代ASP.NET樣板開發框架)系列12ABP領域層——工作單元(Unit Of work)

基於DDD的現代ASP.NET開發框架--ABP系列之12、ABP領域層——工作單元(Unit Of work) ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 通用連線和事務管理方法 連線和事務管理是使用資料庫的應用程

ABP(現代ASP.NET樣板開發框架)系列22ABP展現層——導航欄設定

基於DDD的現代ASP.NET開發框架--ABP系列之22、ABP展現層——導航欄設定 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 每一個WEB應用程式都有導航選單,Abp也為使用者提供了通用的建立和顯示選單方式。

ABP(現代ASP.NET樣板開發框架)系列7ABP Session管理

基於DDD的現代ASP.NET開發框架--ABP系列之7、ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET樣板專案)”的簡稱。 簡介 如果一個應用程式需要登入,則它必須知道當前使用者執行了什麼操作。因此ASP.