2012-08-06 44 views
1

我有關於MEF的問題。從本質上說:MEF部件的依賴關係

assembly my.main { 
    class Main { 
    <Import> 
    Lazy<IMyType> prop; 

    public static void Main(...) { 
     ComposeParts(this); 
     prop.DoStuff(); 
    } 
    } 
} 

assembly my.interfaces { 
    interface IMyType { 
    void DoStuff(); 
    } 
} 

assembly my.parts { 
    using 3rdParty; 
    <Export> 
    class MyType : IMyType { 
    void DoStuff() { 
     3rdParty.DoStuff(); 
    } 
    } 
} 

兩個my.mainmy.parts參考my.interfaces組件。除此之外,my.parts程序集引用了第三方.dll,而我的其他兩個程序則不會。當我嘗試執行上面,一個CompositionExceptionmain()的調用prop.DoStuff()當該消息稱類的3rdParty找不到拋出。

換句話說,MEF部分被注入,但它所需要的DLL不被注入/複製。

有誰知道這個問題的解決方案或解決方法?

+0

執行過程中,您的3rdParty程序集與'my.parts'程序集位於同一個目錄中嗎? – twoflower 2012-08-06 07:45:22

+0

你已經擊中了現場,事實並非如此。在那裏添加它解決了異常。謝謝。 – 2012-08-06 08:32:56

+0

沒問題,很高興我可以幫助:)我添加了一個正確的答案。 – twoflower 2012-08-06 08:46:03

回答

1

在執行期間,3rdParty程序集文件顯然不在my.parts程序集相同的目錄中(或在加載程序探針的任何其他位置)。

+0

由於_my.parts_程序集未被_my.main_程序集引用,因此它不包含在構建過​​程中。 因此,需要在之後單獨構建_my.parts_,並將其構建輸出目錄的內容複製到_my.main_的構建輸出目錄(例如,可以通過添加一些命令來在項目屬性中構建後事件或由批處理腳本)。 – 2012-08-06 08:47:09

+0

我明白了。在這種情況下,必須手動處理程序集部署。 – twoflower 2012-08-06 08:49:37