如何在MEF中使用动态创建的对象?

时间:2017-06-26 10:14:39

标签: c# c#-4.0 mef

假设我有一个班级Cookie

class Cookie
{
   List<Ingredient> ingredients;

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

Cookie用于CookieMonster类,它使用MEF:

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

此代码显然不起作用,因为Cookie没有[Export]属性。问题是Cookie的实例是在运行时创建的,我们需要那个确切的实例。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您向MEF初始化添加CompositionBatch,并将Cookie对象的实例添加到此批处理(通过new或使用现有实例),那么您可以导入您需要使用它的Cookie对象。

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

container.Compose(batch);

在这种情况下,您将能够在MEF创建的类中执行[Import] Cookie myCookie;

目前你的Cookie对象没有实现ICookie(也没有像你正确说的那样导出它),因此导入ICookie不会给你任何东西。