2017-06-26 32 views
0

假設我有一個類Cookie如何在MEF中使用動態創建的對象?

class Cookie 
{ 
    List<Ingredient> ingredients; 

    public Cookie(List<Ingredient> ingredients) 
    { 
     this.ingredients = ingredients;  
    } 
} 

CookieCookieMonster類,它使用MEF使用:

[Export] 
class CookieMonster: ICookieMonster 
{ 
    [Import] 
    ICookie cookie; 
} 

此代碼顯然是行不通的,因爲Cookie沒有[Export]屬性。問題是Cookie的實例是在運行時創建的,我們需要這個確切的實例。

我該如何解決這個問題?

回答

1

如果添加CompositionBatch到您的MEF初始化,以及Cookie對象的實例添加到該批次(無論是通過new或使用現有的實例),那麼你可以導入你的Cookie對象,你需要使用它。

var container = new CompositionContainer(aggregateCatalog); 
var batch = new CompositionBatch(); 
batch.AddExportedValue<ICookie>(new Cookie()); 

container.Compose(batch); 

在這種情況下,您都能夠做到[Import] Cookie myCookie;在由MEF創建的類。

當前你的Cookie對象沒有實現ICookie(也沒有導出,因爲你正確的說),所以導入ICookie不會給你任何東西。