我有一個項目,其中包含兩個模塊,一個基礎設施(Common
庫)和Shell
。如何從MEF中的基礎結構庫中導出類?
注意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」))))」。
導致:無法在部件'Module1.ModuleInit'上設置導入'Module1.ModuleInit._service (ContractName =「Common.FooService」)'「。 Element:Module1.ModuleInit._service (ContractName =「Common.FooService」) - > Module1.ModuleInit - > AssemblyCatalog(Assembly =「Module1,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null」 )
爲什麼我收到此異常?我只是導出一個對象。我想知道發生了什麼以及如何解決它。
請隨意下載它,這是非常小的項目。 Download the compact project
*發現多個導出符合約束...... * – 2012-08-13 23:11:14
我知道,但我不明白爲什麼MEF導出了兩個'FooServices'。我的意思是,'FooService'的想法應該是所有模塊的同一個實例 – 2012-08-13 23:25:58