来自官方MEF documentation:
可组合部件应至少包含一个导出 可组合零件要么添加到容器明确表示,要么通过使用目录创建 MEF随附的默认目录通过导出属性来识别可组合部件。
这是否意味着在使用默认目录时,此代码段与同一文档不起作用,因为它不是 导出 任何内容?
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
我发现很难相信参加 MEF混合的所有课程都必须“把食物带到餐桌上”,即使他们只是想“消费”。
上面的Program
是一个简单的例子:此类没有任何内容可以添加到 MEF mix 。
其次,
如何将“明确地添加到容器”?
例如,文件CompositionContainer对我没有任何帮助。
提前致谢 扬
答案 0 :(得分:2)
可组合零件是可以导入另一个零件的零件。这里的例子是:
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
Program
不是可组合的部分。它自动不会自动导入到另一个部分。您对IMessageSender
的导出是可组合的部分。
您可以使用CompositionBatch
向容器添加部分明确性,这样您就可以明确地将Export
和ComposablePart
个实例添加到容器中,或者通过扩展可以添加原始值:
var user = new User() { Name = "Matt" };
var batch = new CompositionBatch();
batch.AddExportedValue(user);
CompositionContainer.Compose(batch);
最终调用将您的零件添加到容器中。
答案 1 :(得分:0)
在您的示例中,该计划必须致电container.SatisfyImports();
才能检索IMessageSender
。
此外,您可以在接口上使用继承的导出,因此实现所述接口的所有内容都会自动导出。
[InheritedExport]
public interface IMessageSender
{
}
请在此处查看我的代码:MEFMVVMCS.zip