01
—
前言
MEF是微軟自家的托管可擴充架構,在這裡我把它用成了ioc容器。在Caliburn.Micro架構下,view和viewmodel被注入到CompositionContainer容器中,然後通過名稱可以實作view和viewmodel的比對。利用這一特點,在多人合作項目開發中,一個解決方法就可以拆分成很多個項目,隻用在主項目中搭建架構,每個分支項目開發好以後加載到容器中,就可以實作界面和邏輯的調用,可能這樣解釋有點生澀,具體我們看下面執行個體再去了解。
02
建立項目MefTest
第一步 :在我們的解決方法下添加新的項目MefTest(類庫)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1ITM4AzN2gTMx0yM5AzM1IDNyEDMzATMxIDMy0CNxcTNwMjMvwFMxEjMwIzLcRTM3UDMzIzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
第二步:MefTest下添加MefTestView.xaml和MefTestViewModel.cs
MefTestViewModel:
[Export(typeof(MefTestViewModel))] 一般是繼承公共的接口并導出,當然像我這樣直接導出也是可以的.
MefTestView.xaml:
03
通過Mef注入dll
詳細代碼如下:
這裡也可以讓主界面的viewmodel繼承一個公共的接口,比如IShell,這樣這裡接可以改寫為:
04
主程式加載和調用
StartView.xaml中添加一個tab頁:
viewmodel中:
定義 MefTestViewModel
然後在主程式的構造函數中通過ioc擷取viewmodel執行個體:
這樣其它項目的界面就成功的被加載到了我們的主項目中,然而我們并沒有執行個體化,這樣如果我們定義了公共的接口,直接導出接口類型,就很好地實作了主項目和子項目的解耦。
05
運作結果
06
項目源碼
百度網盤:
連結:https://pan.baidu.com/s/11HNocAFoS8Bhpwv0wHeyag
提取碼:點選在看後添加小編微信zls20210502擷取。