2011-08-07 43 views
2

在我的班級我有一個類,進口一類這樣的:MEF:如何檢索某個類型的新實例?

[Import] 
public ContactViewModel ContactViewModel { get; set; } 

類型是這樣定義的:

[PartCreationPolicy(CreationPolicy.NonShared)] 
[Export(typeof(ContactViewModel))] 
public class ContactViewModel {} 

我期待時,我會從屬性看,得到一個新的實例對嗎? 或者可能不是......我一直得到相同的實例,如何在使用該屬性時強制使我成爲新實例?

非常感謝,

回答

4

您確定您正在重新組織您的消費者類嗎? NonShared創建策略將確保每次創建新零件時都會創建一個新實例,所以我會檢查它的另一面,這就是您所在的類。這堂課是否正確重組?

你的另一種選擇是使用一個ExportFactory,例如:

[Import] public ExportFactory<ContactViewModel> ViewModelFactory { get; set; } 
+0

由於馬特,no類擁有上面的屬性是一個控制器(共享)類,因此它不應該被重新合成。我認爲工廠就是解決方案。讓我試試看。 – Houman

+0

非常感謝。有用!所以這就像在Unity中一樣_container.Resolve ();正確? – Houman

1

您應該創建一個工廠和出口,與其然後用它作爲你的財產。當MEF構建具有依賴關係的對象時,MEF部分創建策略不適用於訪問這些依賴關係時。