Import MEF:“是的;可组合部件应至少包含一个“导出”;
官员说: 可组合部件应至少包含一个导出Import MEF:“是的;可组合部件应至少包含一个“导出”;,import,export,mef,catalog,Import,Export,Mef,Catalog,官员说: 可组合部件应至少包含一个导出 可组合部件可以直接添加到容器中,也可以通过使用目录创建。 MEF随附的默认目录通过存在导出属性来标识可组合部件 这是否意味着,当使用默认目录时,相同文档的这个片段将不起作用,因为它不会导出任何内容 class Program { [Import] public IMessageSender MessageSender { get; set; } } 我发现很难相信所有参与MEF组合的班级都必须“把食物带到餐桌上”,即使他们只是想“消费”。 上面的
可组合部件可以直接添加到容器中,也可以通过使用目录创建。
MEF随附的默认目录通过存在导出属性来标识可组合部件 这是否意味着,当使用默认目录时,相同文档的这个片段将不起作用,因为它不会导出任何内容
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
我发现很难相信所有参与MEF组合的班级都必须“把食物带到餐桌上”,即使他们只是想“消费”。上面的
程序
就是一个简单的例子:这个类没有任何东西可以添加到MEF组合中
其次,如何将部件“明确添加到容器”?
例如的文档对我没有任何帮助 提前谢谢
Jan在您的示例中,程序必须调用
container.satisfyiimports()
能够检索IMessageSender
此外,您还可以在接口上使用继承的导出,以便自动导出实现该接口的所有内容
[InheritedExport]
public interface IMessageSender
{
}
请参见此处的代码:可组合部件是可以导入到其他部件中的部件。这里的例子是:
class Program
{
[Import]
public IMessageSender MessageSender { get; set; }
}
程序
不是可组合的部分。它本身不会自动导入到另一个零件中。您对IMessageSender
的导出是可组合的部分
您可以使用CompositionBatch
将零件显式添加到容器中,这允许您将Export
和ComposablePart
实例显式添加到容器中,或者通过扩展,您可以添加原始值:
var user = new User() { Name = "Matt" };
var batch = new CompositionBatch();
batch.AddExportedValue(user);
CompositionContainer.Compose(batch);
最后一个调用是将部件添加到容器中