我在玩弄新的 System.ComponentModel.Composition 在.NET 4.0的β2的命名空间,也被称为托管扩展框架

我使用其中Monkey导入一个Banana下面的C#示例:

public interface IBanana 
{ 
}

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

public class Monkey
{
    [Import(typeof(IBanana))]
    public IBanana Banana { get; set; }
}

然而,当我尝试撰写猴子作为然后如下获得带有该消息的InvalidOperationException:此对象尚未初始化 - 属性‘SourceProvider’必须设置即可。”:

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
var monkey = new Monkey();
container.ComposeParts(monkey);

我缺少的是在这里吗?我知道我可以通过目录的情况下直接在CatelogExportProvider包装,但应该不是上面还工作吗?

有帮助吗?

解决方案

在CatalogExportProvider需要一个参考回容器。下面的代码应工作:

var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
exportProvider.SourceProvider = container;
var monkey = new Monkey();
container.ComposeParts(monkey);

当传递一个目录到构造的容器自动执行此操作。我不认为有很多经常的原因手动创建CatalogExportProvider。

CatalogExportProvider需要将容器的引用的原因是可能存在与需要由容器被挂接到其他出口提供商满足进口部件在目录

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top