0

接到以下电话hostContainer.ComposeParts()

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

1) 没有找到与约束匹配的有效导出 '((exportDefinition.ContractName == "ModLibrary.IDataHandler") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "ModLibrary.IDataHandler".Equals(exportDefinition.Metadata. get_Item("ExportTypeIdentity"))))',无效的导出可能已被拒绝。

导致:无法在“ModAppWorks.Host”部件上设置导入“ModAppWorks.Host.DataHandler (ContractName="ModLibrary.IDataHandler")”。元素:ModAppWorks.Host.DataHandler (ContractName="ModLibrary.IDataHandler") --> ModAppWorks.Host

Source = System.ComponentModel.Composition StackTrace:在 System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition atomicComposition) 在 System.ComponentModel.Composition.Hosting.ComposablePartExportProvider.Compose(CompositionBatch 批处理) 在 System.ComponentModel.Composition.Hosting.CompositionContainer。 Compose(CompositionBatch batch) at System.ComponentModel.Composition.AttributedModelServices.ComposeParts(CompositionContainer container, Object[] attributesParts) 在 ModAppWorks.Host.Compose() 在 C:\Projects\ModAppWorks_2\HostProgram.cs:第 83 行在 ModAppWorks.Host C:\Projects\ModAppWorks_2\HostProgram.cs 中的 .Run():C:\Projects\ModAppWorks_2\HostProgram.cs 中 ModAppWorks.Program.Main() 中的第 49 行:System.AppDomain 中的第 25 行。_nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object状态)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart( ) 内部异常:String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException:ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

导入片段:

[Import(typeof(IDataHandler))]
public Lazy<IDataHandler> DataHandler { get; set; }

但是,DataHandler 是这样定义的:

[Export(typeof(IDataHandler))]
public class DataAgent : DataProvider<SqlConnection, SqlDataReader>, IDataHandler
{
    // contains an empty public ctor passing ctor parameters to DataProvider
}

DataProvider 是一个抽象类,同样继承了 IDataHandler 并实际实现了 IDataHandler 接口。此外,构建直接写入主机应用程序的 \Extensions 目录。

关于我做错了什么的任何建议?

4

1 回答 1

0

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

编辑

好的,对此进行了更多测试,似乎是的,只要基类不继承要导入主机的部分,您的类就可以为基构造函数提供参数。

于 2010-12-11T21:13:01.877 回答