0
我有一個MEF合成問題。在我的開發環境中,我可以使用此代碼導入零件。MEF合成進口問題
var dirCatalog = new DirectoryCatalog(path, "MyCompany.*.dll");
var container = new CompositionContainer(dirCatalog);
container.SatisfyImportsOnce(this);
但是,當我部署到測試服務器不起作用。我發現,使工作權的唯一方法是顯式裝載有出口這樣的dll文件:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Modelling.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.AppServer.Dispatchers.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.Services.AppServer.Service.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentService.Proxy.dll"))));
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(Path.Combine(path, "MyCompany.IFS.Common.InstrumentPropertyService.Proxy.dll"))));
var container = new CompositionContainer(catalog);
container.SatisfyImportsOnce(this);
很顯然,我真的不希望顯式地加載每一個有一個出口在它的dll ;這種失敗打破了MEF的宗旨。但是,現在這是我發現的唯一工作。
此代碼位於用於啓動IIS中託管的WCF服務的自定義服務主機工廠中。不知道的事項...
TIA, 格雷格
將DLL文件名放在配置文件中仍然會失敗MEF的用途。 –
配置文件比明確聲明代碼中的每個DLL提供了更大的靈活性。 MEF提供可擴展性。僅僅因爲你必須說明包含哪些部分,並不能夠達到提供可擴展性的目的。 (它只涉及一個步驟。) –