2012-01-06 71 views
1

如何使用MEF动态地解析我的导入。 一个例子:如何使用MEF导入并仅在满足时才加载它们

class Class1 
{ 
    [Export("P1", typeof(string)] 
    string _p1; 
} 

class Class2 
{ 
    [Import("P1", typeof(string), AllowRecomposition = true] 
    string importedP1; 
} 

Class1的是在另外一个组件和等级2。组件不相互认识。问题是,在CompositionContainer.ComposeParts()的调用中,Class1的程序集/导出未在任何目录中注册,而是在Class2的导入中注册。基本上我甚至不能确定Class1的组件是否会被加载。但是,如果它会被加载,我希望导入将自动/动态满足。

我该如何做到这一点?我认为“AllowRecomposition”正是为这种情况,但我得到一个ChangeRejectedException,因为组合错误发生的消息,没有有效的导出被发现与我的导入的限制。

回答

2

您应该在您的Import声明中设置AllowDefault=true。这样,如果导入不满足,您将不会得到运行时错误,并且如果稍后加载该程序集,您仍然能够满足它。

[Import("P1", typeof(string), AllowDefault = true, AllowRecomposition = true] 
0

检查MEF文档。问题是MEF必须实例化class1和class2,否则你没有得到它的工作。

你可以发布你的codecontainer和class1,class2的使用,所以我们可以帮助你更好一点。一种方法是将[Export]属性设置为您的类。

相关问题