我有一个项目,其中包含两个模块,一个基础设施(Common
库)和Shell
.
注意Common
有一个FooService
,这个有一个ExportAttribute
[Export]
public class FooService
{
}
这个应该由Module1
and使用Module2
,但是如果我有ImportAttribute
. 请注意评论。
[ModuleExport("Module1.ModuleInit", typeof(Module1.ModuleInit))]
public class ModuleInit : IModule
{
private readonly IRegionManager _regionManager;
public IServiceLocator _serviceLocator;
// [Import(AllowRecomposition=true)]
public FooService _service;
[ImportingConstructor]
public ModuleInit(IRegionManager regionManager, IServiceLocator serviceLocator)
{
_regionManager = regionManager;
_serviceLocator = serviceLocator;
}
public void Initialize() { }
}
此代码与Module2
.
初始化模块“Module2.ModuleInit”时发生异常。- 异常消息是:组成保持不变。由于以下错误,更改被拒绝: 合成产生了单个合成错误。下面提供了根本原因。查看 CompositionException.Errors 属性以获取更多详细信息。
1) 找到多个与约束匹配的导出 '((exportDefinition.ContractName == "Common.FooService") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "Common.FooService".Equals(exportDefinition.Metadata .get_Item("ExportTypeIdentity"))))'。
导致:无法在部件 'Module1.ModuleInit' 上设置导入 'Module1.ModuleInit._service (ContractName="Common.FooService")'。元素:Module1.ModuleInit._service (ContractName="Common.FooService") --> Module1.ModuleInit --> AssemblyCatalog (Assembly="Module1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
为什么我会收到此异常?我只是导出一个对象。我想知道发生了什么以及如何解决它。
请随意下载它,这是一个非常小的项目。 下载压缩项目