如何使用MEF导入并仅在满意时加载它们

时间:2012-01-06 12:38:42

标签: c# dynamic mef composition

如何使用MEF动态解析我的导入。 一个例子:

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

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

Class1在一个程序集中,Class2在另一个程序集中。大会彼此不认识。问题是,在调用CompositionContainer.ComposeParts()时,Class1的汇编/导出未在任何目录中注册,而是在Class2的导入中注册。基本上我甚至无法确保将加载Class1的程序集。但如果它会被加载我想自动/动态地满足导入。

我怎样才能做到这一点?我想" AllowRecomposition"是完全适用于这种情况,但我得到一个ChangeRejectedException,因为一个组合错误发生的消息是没有找到有效导出我的导入限制。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

检查MEF文档。问题是MEF必须同时实例化class1和class2,否则你无法正常工作。

您可以发布组合容器的代码并使用class1,class2,这样我们可以帮助您更好一点。一种方法是将[Export]属性设置为您的类。