假设我有一个班级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的实例是在运行时创建的,我们需要那个确切的实例。
我该如何解决这个问题?
答案 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
不会给你任何东西。