Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复杂派生类型导入到MEF主机应用程序时出现问题_C#_Mef_Composition_Importerror - Fatal编程技术网

C# 复杂派生类型导入到MEF主机应用程序时出现问题

C# 复杂派生类型导入到MEF主机应用程序时出现问题,c#,mef,composition,importerror,C#,Mef,Composition,Importerror,调用hostContainer.ComposeParts()时接收以下内容: System.ComponentModel.Composition.ChangeRejectedException was unhandled Message=未经处理的消息 组成保持不变。这个 更改被拒绝,因为 以下错误:合成错误 产生了一个构图错误。 下面提供了根本原因。 查看CompositionException.Errors 属性以获取更多详细信息 信息 1) 未找到有效的导出 匹配约束 “((exportD

调用hostContainer.ComposeParts()时接收以下内容:

System.ComponentModel.Composition.ChangeRejectedException was unhandled Message=未经处理的消息 组成保持不变。这个 更改被拒绝,因为 以下错误:合成错误 产生了一个构图错误。 下面提供了根本原因。 查看CompositionException.Errors 属性以获取更多详细信息 信息

1) 未找到有效的导出 匹配约束 “((exportDefinition.ContractName== “ModLibrary.IDataHandler”)和 (exportDefinition.Metadata.ContainsKey(“ExportTypeIdentity”) 安达索 “ModLibrary.IDataHandler”.Equals(exportDefinition.Metadata.get_项(“ExportTypeIdentity”))”, 可能已删除无效的导出 拒绝

导致:无法设置导入 'ModAppWorks.Host.DataHandler (ContractName=“ModLibrary.IDataHandler”)' 在“ModAppWorks.Host”部分。要素: ModAppWorks.Host.DataHandler (ContractName=“ModLibrary.IDataHandler”) -->ModAppWorks.Host

Source=System.ComponentModel.Composition 堆栈跟踪: 在System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition 原子组成 在System.ComponentModel.Composition.Hosting.ComponenablePortExportProvider.Composite(CompositionBatch)中 批次) 位于System.ComponentModel.Composition.Hosting.CompositionContainer.Composite(CompositionBatch 批次) 位于System.ComponentModel.Composition.AttributedModelServices.ComponentParts(CompositionContainer 容器,对象[]attributedParts) 在中的ModAppWorks.Host.Compose()处 C:\Projects\ModAppWorks\u 2\HostProgram.cs:line 83 在C:\Projects\ModAppWorks\u 2\HostProgram.cs:line中的ModAppWorks.Host.Run()处 49 在中的ModAppWorks.Program.Main()处 C:\Projects\ModAppWorks\u 2\HostProgram.cs:line 25 位于System.AppDomain.\u下一个SecureTasembly(运行时程序集 程序集,字符串[]args) 位于System.AppDomain.ExecuteAssembly(字符串 档案、证据 assemblySecurity,字符串[]args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上 在System.Threading.ThreadHelper.ThreadStart\u上下文(对象 (州) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 ignoreSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调(对象状态) 位于System.Threading.ThreadHelper.ThreadStart()处 内部异常:

导入代码段:

[Import(typeof(IDataHandler))]
public Lazy<IDataHandler> DataHandler { get; set; }
[Import(typeof(IDataHandler))]
公共惰性数据处理程序{get;set;}
但是,DataHandler的定义如下:

[Export(typeof(IDataHandler))]
public class DataAgent : DataProvider<SqlConnection, SqlDataReader>, IDataHandler
{
    // contains an empty public ctor passing ctor parameters to DataProvider
}
[导出(typeof(IDataHandler))]
公共类DataAgent:DataProvider,IDataHandler
{
//包含向DataProvider传递构造函数参数的空公共构造函数
}
DataProvider是一个抽象类,它也继承IDataHandler并实际实现IDataHandler接口。此外,生成将直接写入主机应用程序的\Extensions目录


关于我做错了什么有什么建议吗?

我开始怀疑构造函数不能用参数调用基构造函数。我删除了对
:base(param1,param2)
的调用,该类将导入

编辑
好的,用这个做了更多的测试,看起来,是的,只要基类没有继承要导入到主机的部分,您的类就可以向基类构造函数提供参数。

调用基类构造函数应该没有问题,但我看不出您发布的内容有任何问题。有关如何调试这些类型的错误,请参阅此博客文章: