2017-11-06 7 views
0

私の会社では、普遍的に使用できるシンプルなGUIフレームワークを開発しています。私はGUIフレームワークを起動したときに、どのプラグインをロードすべきか、それらのGUI要素をどこに配置するかなどを定義する設定ファイルを読み込ませたい。しかし、設定ファイルの読み方、およびいくつかの書き方は、プラグインを介して行う必要があります。そのため、このプラグインは最初にロードする必要があります。なぜなら、他のものをロードする前に、それらを識別するためにconfigファイルを読み出す必要があるからです。 var dirCatalog = new DirectoryCatalog(@"..\..\Extensions\","ProgramConfigManager*");MEFで特定のプラグインのみを読み込むにはどうしたらいいですか?

しかし、私は、ファイル名に依存したくない:

私は、私はこのようなだけで定義されたDLLをロードできること、がわかりました。 、この後

[Import(typeof(ISAProgramConfigManagerContent))] 
SAProgramConfigManagerContent PCM; 

他のプラグインが、設定ファイル内のものだけが、この内にロードする必要があります:私の意図は、最初のインターフェイスISAProgramConfigManagerContentとMEFプラグインをロードすることです

[ImportMany(typeof(IPlugin))] 
List<IPlugin> Plugins; 

されていますそこには、まず契約ファイルを処理する特別なPluginをロードし、タイプISAProgramConfigManagerContentの1つを作成するだけです。

ありがとうございます。

答えて

0

他のアセンブリからインポートする場合は、MEFにファイルがどのように見えるかを伝える必要があります。これは、ディレクトリ、ファイルグロビング、またはその他のカスタム手段のいずれかです。さもなければ、MEFは輸出を探す方法がありません。

これは、最初にプラグインマネージャーを読み込むためのカタログをセットアップすることができたことを示しています。そして、それに基づいて、読み込みたいエントリを持つ別のカタログをセットアップし、プログラムからプラグインをインポートします。またを結合するのにAggregateCatalogを使うこともできます。以下のような

何か:

var container = new CompositionContainer(aggregateCatalog); 
IEnumerable<IPlugin> plugins = container.GetExports<IPlugin>(); 
+0

は「管理プラグイン」のパスまたは名前で区別は私が行きたかったしていない、だけの方法でした。しかしGetExportはちょうど私が探していたものでした: 'Lazy p = ExtensionCandidates.GetExport ();' これで、正しいタイプのプラグインが得られました。ありがとうございました! – ProperHacker

関連する問題