gpt4 book ai didi

c# - MEF 'The export is not assignable to type' 错误

转载 作者:太空狗 更新时间:2023-10-29 21:36:38 25 4
gpt4 key购买 nike

我刚刚开始使用 MEF 并遇到了早期问题。

我有一个名为 DataService 的接口(interface):

namespace DataAccess
{
interface IDataService
{
string Name { get; }
string Description { get;}

List<String> GetPeople();
}
}

该接口(interface)有2种实现,一种用于SQL Server,一种用于Oracle。下面是Oracle实现,SQL Server实现完全一样。

namespace DataAccess
{
[Export(typeof(IDataService))]
[ExportMetadata("Name","Oracle")]
[ExportMetadata("Description","Oracle Data Service")]
public class Oracle : IDataService
{

#region IDataService Members

public string Name
{
get { return "Oracle"; }
}

public string Description
{
get { return "Provides data access to Oracle database"; }
}

public List<string> GetPeople()
{
return new List<String>() { "Oracle boo", "Oracle boo1" };
}

#endregion
}
}

名称和描述属性现已失效,因为我已将它们替换为元数据。如您所见,它们是非常简单的对象,我想确保在开始艰苦的工作之前我能够让它发挥作用。

这是我用来发现程序集的代码:

    private static CompositionContainer _container;
private const string ASSEMBLY_PATTERN = "*.dll";
private AggregateCatalog _catalog;

[ImportMany]
IEnumerable<DataAccess.IDataService> services { get; set; }

private void button3_Click(object sender, EventArgs e)
{


_catalog = new AggregateCatalog(
new DirectoryCatalog(txtLibPath.Text, ASSEMBLY_PATTERN),
new AssemblyCatalog(Assembly.GetExecutingAssembly()));
_container = new CompositionContainer(_catalog);
_container.ComposeParts(this);
MessageBox.Show(services.Count().ToString());
}

这是产生的错误:

作文产生了一个作文错误。下面提供了根本原因。查看 CompositionException.Errors 属性以获取更多详细信息。

1) 导出“DataAccess.Oracle (ContractName="DataAccess.IDataService")”不可分配给类型“DataAccess.IDataService”。

导致:无法在“MEFTest.Form1”部分设置导入“MEFTest.Form1.services (ContractName="DataAccess.IDataService")”。元素:MEFTest.Form1.services (ContractName="DataAccess.IDataService") --> MEFTest.Form1

它不能分配给它设计的接口(interface)似乎没有任何意义!

一旦这个问题解决了,我的下一个问题是如何选择一个并获得它的实例......

最佳答案

看起来您的契约(Contract)程序集的两个不同版本(带有 DataAccess.IDataService 的那个)正在加载。一个可能来自您的可执行文件路径,另一个可能来自您的插件路径。我在 How to Debug and Diagnose MEF Failures 上的博客文章中略微谈到了这个问题。 ,以及 Best Practices for Assembly Loading 上的 MSDN 页面进入更多细节。

关于c# - MEF 'The export is not assignable to type' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955382/

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