2011-12-07 60 views
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, 格雷格

回答

0

爲什麼不把DLL文件名XML或其他配置文件內。至少你不必重新編譯。

我至少建議有..

的IsEnabled,這樣你可以只需撥動,而不必在XML文件中發表評論的IsEnabled。

+0

將DLL文件名放在配置文件中仍然會失敗MEF的用途。 –

+0

配置文件比明確聲明代碼中的每個DLL提供了更大的靈活性。 MEF提供可擴展性。僅僅因爲你必須說明包含哪些部分,並不能夠達到提供可擴展性的目的。 (它只涉及一個步驟。) –