【发布时间】:2012-08-13 23:08:08
【问题描述】:
我有一个项目,其中包含两个模块,一个基础架构(Common 库)和Shell。
注意Common有一个FooService,这个有一个ExportAttribute
[Export]
public class FooService
{
}
这个应该由Module1 和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"))))'。
导致:无法设置 import 'Module1.ModuleInit._service (ContractName="Common.FooService")' 在“Module1.ModuleInit”部分。 元素:Module1.ModuleInit._service (ContractName="Common.FooService") --> Module1.ModuleInit --> AssemblyCatalog (Assembly="Module1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
为什么我会收到此异常?我只是导出一个对象。我想知道发生了什么以及如何解决它。
请随意下载,这个项目很小。 Download the compact project
【问题讨论】:
-
找到多个与约束匹配的导出...
-
我知道,但我不明白为什么 MEF 会导出两个“FooServices”。我的意思是,“FooService”应该是所有模块的同一个实例
标签: c# module export prism mef