2011-12-07 11 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

なぜXMLまたは他の設定ファイル内DLLファイル名を入れない ...それは重要なことを確認していません。少なくとも再コンパイルする必要はありません。

私は、少なくとも..

ファイル名でIsEnabled、あなただけではなく、XMLファイルにコメントするのででIsEnabledを切り替えることができ、そのようになることをお勧めしたいです。

+0

DLLファイル名を設定ファイルに入れても、MEFの目的はまだ無効になります。 –

+0

設定ファイルは、コード内に各DLLを明示的に記述するよりもはるかに柔軟性があります。 MEFは拡張性を提供します。どの部分を含めるべきかを明記しなければならないだけで、拡張性を提供する目的を破らないためです。 (もう1つのステップだけが必要です)。 –

関連する問題