gpt4 book ai didi

.net - 必须设置 MEF 异常 "' SourceProvider'。”

转载 作者:行者123 更新时间:2023-12-01 00:04:54 24 4
gpt4 key购买 nike

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

我使用以下 C# 示例,其中 Monkey进口一个 Banana :

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 需要对容器的引用的原因是目录中可能有部分具有导入需要由容器连接到的其他导出提供者来满足。

关于.net - 必须设置 MEF 异常 "' SourceProvider'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com