必须设置MEF异常"'SourceProvider'."

Wim*_*nen 4 .net mef .net-4.0-beta-2

我正在使用.NET 4.0 beta 2中的新System.ComponentModel.Composition命名空间,也称为Managed Extensibility Framework.

我使用以下C#示例,其中Monkey导入a Banana:

public interface IBanana 
{ 
}

[Export(typeof(IBanana))]
public class Banana : IBanana 
{ 
} 

public class Monkey
{
    [Import(typeof(IBanana))]
    public IBanana Banana { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试按如下方式编写猴子时,我得到一条InvalidOperationException消息" 此对象尚未初始化 - 必须设置属性'SourceProvider'. ":

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
var monkey = new Monkey();
container.ComposeParts(monkey);
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我知道我可以直接传递目录而不将其包装在CatelogExportProvider中,但是上面也不应该工作吗?

Dan*_*ted 5

CatalogExportProvider需要一个返回容器的引用.以下代码应该有效:

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
exportProvider.SourceProvider = container;
var monkey = new Monkey();
container.ComposeParts(monkey);
Run Code Online (Sandbox Code Playgroud)

将目录传递给构造函数时,容器会自动执行此操作.我认为通常没有理由手动创建CatalogExportProvider.

CatalogExportProvider需要对容器的引用的原因是目录中可能存在导入需要由容器连接到的其他导出提供程序满足的部分.