Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Import MEF:“是的;可组合部件应至少包含一个“导出”;_Import_Export_Mef_Catalog - Fatal编程技术网

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);
最后一个调用是将部件添加到容器中