ABP官方文件 三 模組系統

2021-08-10 02:07:47 字數 3299 閱讀 5239

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

模組系統當前專注於服務端而不是客戶端。

譯者注:

如果學習過orchard的朋友,應該知道module模組的強大了。模組的本質就是可重用性,你可以在任意的地方去呼叫,而且通過實現模組,你寫的模組也可以給別人用。.net可以通過反射獲取乙個程式集中的類以及方法。

assembly程式集:assembly是乙個用來包含程式的名稱,版本號,自我描述,檔案關聯關係和檔案位置等資訊的乙個集合。最簡單的理解就是:乙個你自己寫的類庫生成的dll就可以看做是乙個程式集,這個程式集可以包括很多類,類又包括很多方法等。

乙個派生自abpmodule的類就是模組的定義。我們正在開發乙個部落格模組,該模組可以被使用在不同的應用程式中。最簡單的模組定義示例如下:

public

}

如果需要的話,模組類負責類的依賴注入(通常可以像上面一樣做)。我們能配置應用程式和其它模組,新增新的功能到應用程式等等。

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

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

preinitialize-b

下面是具體方法的說明:

preinitialize

預初始化:當應用啟動後,第一次執行會先呼叫這個方法。在初始化(initialize)方法呼叫之前,該方法通常是用來配置框架以及其它模組。

在依賴注入註冊之前,你可以在這個方法中指定你需要注入的自定義啟動類。例如:加入你建立了某個符合約定的註冊類,你應該使用iocmanager.addconventionalregisterer方法在這裡註冊它。

initialize

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

postinitialize

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

shutdown

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

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

[dependson(typeof(myblogcoremodule))]//通過註解來定義依賴關係

public

}

abp可以從startup module遞迴的解析依賴關係,並按需初始化它們。最後初始化的模組是啟動模組(startup module)。

asp.net core

abp的asp.net core模組也可以動態載入模組,你只需要在startup類中使用已定義的擴充套件方法addabp,如下所示:

services.addabp

(options =>

);

我們可以使用擴充套件方法addfolder更方便的實現上述功能:

services.addabp

(options =>

);

asp.net mvc,web api
public

protected

override

void

}

外掛程式中的控制器

如果你的模組包括了mvc或者web api控制器,asp.net不能發現這些控制器。為了克服這個問題,你可以在global.asax中新增**來實現,如下所示:

using system.web;

using abp.plugins;

using abp.web;

public

static

class prestarter

}}

additional assemblies

對於iassemblyfinder和itypefinder的預設實現(這兩個介面的實現被abp用來在應用程式中發現指定的類)僅僅只用來查詢模組程式集以及在這些程式集中所使用的型別。我們可以在我們的模組中重寫getadditionalassemblies方法來包含附加程式集。

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

譯者注:

abp的模組系統與orchard的模組有類似之處,但還是有比較大的差別。orchard的框架修改了asp.net程式集的預設載入方式(模組的dll沒有放在bin資料夾下,是放在web專案根資料夾下面的modules資料夾下),實現了功能模組的熱插拔,而abp的模組程式集還是放在bin資料夾下的,沒有實現熱插拔。

public

class mymodule1 : abpmodule

public

void

mymodulemethod1()

}[dependson(typeof(mymodule1))]

public

class mymodule2 : abpmodule

public

override

void

preinitialize()

public

override

void

initialize()

}

在這裡,我們通過建構函式注入mymodule1到mymodule2,所以mymodule2能夠呼叫mymodule1的自定義方法。當且僅當mymodule2依賴於mymodule1才是可能的。

雖然自定義模組可以被用來配置模組,但是,作者建議使用 啟動配置 來定義和配置模組。

所有的模組類都被自動的註冊為單例模式。

ABP官方文件翻譯 3 5 規約

規約 建立規範類 使用倉儲規約 組合規約 討論介紹 規約模式是一種特別的軟體設計模式,通過使用布林邏輯將業務規則鏈結起來重新調配業務規則。維基百科 尤其是,它通常用來為實體或其他業務物件定義可復用的過濾器。示例 在這個部分,我們將看到規約模式的必要性。本部分是通用的,和abp的實現沒有必然的關係。假...

ABP官方文件 四 啟動配置

在應用啟動之前,abp框架提供了模組基本的配置和方法,大家參照下面這個例子就可以了。public class tasksystemmodule abpmodule public override void initialize 和orchard類似,abp框架一開始就被設計成模組化的,不同的模組可以...

ABP官方文件 九 快取管理

abp給出了乙個抽象快取基類。並在內部使用了該抽象基類。使用 memorycache 來實現了該抽象基類。它能夠被任何其它的快取類來擴充套件。abp.rediscache 包就擴充套件了該快取基類。abp對外提供了乙個快取介面icachemananger。我們通過建構函式注入這個介面來獲取快取。示例...