MEF:“可组合部件应包含至少一个导出”

时间:2011-07-13 14:19:49

标签: import export mef catalog

来自官方MEF documentation

  

可组合部件应至少包含一个导出   可组合零件要么添加到容器明确表示,要么通过使用目录创建   MEF随附的默认目录通过导出属性来识别可组合部件。

这是否意味着在使用默认目录时,此代码段与同一文档不起作用,因为它不是 导出 任何内容?

class Program
{
  [Import]
  public IMessageSender MessageSender { get; set; }
}

我发现很难相信参加 MEF混合的所有课程都必须“把食物带到餐桌上”,即使他们只是想“消费”。
上面的Program是一个简单的例子:此类没有任何内容可以添加到 MEF mix

其次,
如何将“明确地添加到容器”? 例如,文件CompositionContainer对我没有任何帮助。

提前致谢 扬

2 个答案:

答案 0 :(得分:2)

可组合零件是可以导入另一个零件的零件。这里的例子是:

class Program
{
    [Import]
    public IMessageSender MessageSender { get; set; }
}

Program不是可组合的部分。它自动不会自动导入到另一个部分。您对IMessageSender的导出是可组合的部分。

您可以使用CompositionBatch向容器添加部分明确性,这样您就可以明确地将ExportComposablePart个实例添加到容器中,或者通过扩展可以添加原始值:

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