基於ABP模組元件與依賴注入元件的專案外掛程式開發

2021-09-25 02:46:21 字數 1489 閱讀 6913

注意,閱讀本文,需要先閱讀以下兩篇文章,並且對依賴注入有一定的基礎。

模組系統:

依賴注入:

正文:

我最近在設計乙個專案,而這個專案的一些業務功能,需要以外掛程式的方式提供給這個專案,從而降低耦合性,主專案不會對具體業務功能產生依賴。

在以前,最簡單粗暴的方式,就是掃瞄主程式目錄下的所有dll或指定目錄下的dll,然後反射生成執行時物件。

現在,由於整個專案,採用了依賴注入,包括外掛程式專案也是如此。

在不知道abp外掛程式元件之前,使用依賴注入的情況下,我找不到比較靈活簡潔的方式,為主程式提供外掛程式功能。

很是苦惱,經過一番搜尋,找到了abp官方github裡的sample專案: 才知道有這個外掛程式元件。

有這個外掛程式元件,要做外掛程式式專案開發就容易多了。

我另外寫了個基於abp的控制台demo專案,做下備忘吧。

using

system;

using

system.io;

using

abp;

using

abp.plugins;

namespace

console.writeline(""

); console.readkey();}}

}

外掛程式式開發,有幾個需要注意的地方:

1.在主專案,需要這一句**:booter.pluginsources.addfolder(path);

通知abp的module系統和di系統,這個目錄下也有dll需要掃瞄和初始化。

2.每個外掛程式專案,需要新增乙個abpmodule派生類。

因為abp只掃瞄包含有abpmodule派生類的程式集,所有你需要建立乙個abpmodule派生類來告訴abp,這裡也需要掃瞄和初始化。

3.每個外掛程式介面/類,需要繼承isingletondependency,itransientdependency等位於abp.dependency命令空間下的dependency介面。

abp會掃瞄所有繼承了這些介面的介面/類,自動幫你解決依賴關係,並且建立相關的依賴物件。

乙個比較簡單的abpmodule派生類,如下:

using

system.reflection;

using

abp.modules;

namespace}}

一般情況下,每個abpmodule派生類,都應該用iocmanager.registerassemblybyconvention(assembly.getexecutingassembly());這一句**重寫initalize方法。

專案結構圖:

目錄結構圖:

vue元件依賴注入

在這個元件裡,所有的後代都需要訪問乙個getmap方法,以便知道要跟哪個地圖進行互動。不幸的是,使用 parent屬性無法很好的擴充套件到更深層級的巢狀元件上。這也是依賴注入的用武之地,它用到了兩個新的例項選項 provide和inject。provide選項允許我們指定我們想要提供給後代元件的資料...

對GUI元件的依賴注入

對於某些人來說,這是不言而喻的,但是最近的一次通訊使我想知道其中隱含的危險 在我的 學習vaadin 一書中,我展示了如何將vaadin web框架與spring 為什麼這樣?到目前為止,這是我的推理。使用di有一些原因。僅舉幾例 現在,ui元件可能必須與其他3種元件進行協作 其他ui元件,gui行...

編譯核心指定模組,篩選當前模組依賴的元件

關於核心模組編譯的過程中,往往我們僅僅需要其中乙個小的模組,但是卻因為核心原始碼的龐雜而止步與模組依賴的篩選過程中。為了更加便捷得對核心各個模組進行管理,這裡提供乙個小腳本來進行指定模組相關得模組留存,不相關的模組 自動清除。單獨對核心指定模組進行編譯,主要使用如下命令 在相對目錄為 rpmbuil...