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は拡張性を提供します。どの部分を含めるべきかを明記しなければならないだけで、拡張性を提供する目的を破らないためです。 (もう1つのステップだけが必要です)。 –