2012-01-06 17 views
1

如何使用MEF動態地解析我的導入。 一個例子:如何使用MEF導入並僅在滿足時才加載它們

class Class1 
{ 
    [Export("P1", typeof(string)] 
    string _p1; 
} 

class Class2 
{ 
    [Import("P1", typeof(string), AllowRecomposition = true] 
    string importedP1; 
} 

Class1的是在另外一個組件和等級2。組件不相互認識。問題是,在CompositionContainer.ComposeParts()的調用中,Class1的程序集/導出未在任何目錄中註冊,而是在Class2的導入中註冊。基本上我甚至不能確定Class1的組件是否會被加載。但是,如果它會被加載,我希望導入將自動/動態滿足。

我該如何做到這一點?我認爲「AllowRecomposition」正是爲這種情況,但我得到一個ChangeRejectedException,因爲組合錯誤發生的消息,沒有有效的導出被發現與我的導入的限制。

回答

2

您應該在您的Import聲明中設置AllowDefault=true。這樣,如果導入不滿足,您將不會得到運行時錯誤,並且如果稍後加載該程序集,您仍然能夠滿足它。

[Import("P1", typeof(string), AllowDefault = true, AllowRecomposition = true] 
0

檢查MEF文檔。問題是MEF必須實例化class1和class2,否則你沒有得到它的工作。

你可以發佈你的codecontainer和class1,class2的使用,所以我們可以幫助你更好一點。一種方法是將[Export]屬性設置爲您的類。

相關問題