2017-06-26 79 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不会给你任何东西。