可组合部件应至少包含一个导出。 可组合部件可以添加到容器明确表中,也可以通过使用目录创建。 MEF附带的默认目录通过导出属性的存在来标识可组合部件。
这是否意味着当使用默认目录时,此片段与相同文档不起作用,因为它不会导出任何内容?
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
我发现很难相信参加MEF混合的所有课程都必须“把食物带到餐桌上”,即使他们只是想“消费”。
上面的Program
就是一个简单的例子:这个类没有任何东西可以添加到MEF组合中。
其次, 如何将“部件”明确添加到容器中? 例如,文件CompositionContainer对我没有任何帮助。
在此先感谢Jan
可组合部件是可以导入另一部件的部件。这里的例子:
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);
最后的调用是将您的零件添加到容器中。
在你的例子中,程序必须调用container.SatisfyImports();
才能检索IMessageSender
。
此外,您可以在接口上使用继承的导出,因此实现所述接口的所有内容都会自动导出。
[InheritedExport]
public interface IMessageSender
{
}
在这里查看我的代码:MEFMVVMCS.zip