注意,閱讀本文,需要先閱讀以下兩篇文章,並且對依賴注入有一定的基礎。
模組系統:
依賴注入:
正文:
我最近在設計乙個專案,而這個專案的一些業務功能,需要以外掛程式的方式提供給這個專案,從而降低耦合性,主專案不會對具體業務功能產生依賴。
在以前,最簡單粗暴的方式,就是掃瞄主程式目錄下的所有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一般情況下,每個abpmodule派生類,都應該用iocmanager.registerassemblybyconvention(assembly.getexecutingassembly());這一句**重寫initalize方法。system.reflection;
using
abp.modules;
namespace}}
專案結構圖:
目錄結構圖:
vue元件依賴注入
在這個元件裡,所有的後代都需要訪問乙個getmap方法,以便知道要跟哪個地圖進行互動。不幸的是,使用 parent屬性無法很好的擴充套件到更深層級的巢狀元件上。這也是依賴注入的用武之地,它用到了兩個新的例項選項 provide和inject。provide選項允許我們指定我們想要提供給後代元件的資料...
對GUI元件的依賴注入
對於某些人來說,這是不言而喻的,但是最近的一次通訊使我想知道其中隱含的危險 在我的 學習vaadin 一書中,我展示了如何將vaadin web框架與spring 為什麼這樣?到目前為止,這是我的推理。使用di有一些原因。僅舉幾例 現在,ui元件可能必須與其他3種元件進行協作 其他ui元件,gui行...
編譯核心指定模組,篩選當前模組依賴的元件
關於核心模組編譯的過程中,往往我們僅僅需要其中乙個小的模組,但是卻因為核心原始碼的龐雜而止步與模組依賴的篩選過程中。為了更加便捷得對核心各個模組進行管理,這裡提供乙個小腳本來進行指定模組相關得模組留存,不相關的模組 自動清除。單獨對核心指定模組進行編譯,主要使用如下命令 在相對目錄為 rpmbuil...