2011-01-10 14 views
1

他の依存関係のDLL /ライブラリが満たされている場合にのみMEFにdllをロードするよう指示する方法はありますか?私は別の拡張機能に依存する拡張機能を作成しようとしています。私は他の拡張が存在するかどうかをチェックすることができる、または私の拡張をロードしようとするだけではないことを確認できるようにしたい。それも可能ですか?一部の外部ライブラリが満足する場合にのみエクスポート/インポートする

 [DllImport("kernel32", SetLastError = true)] 
     static extern IntPtr LoadLibrary(string fileName); 
     static bool CheckLibrary(string fileName) 
     { 
      return LoadLibrary(fileName) != IntPtr.Zero; 
     } 

は今、私は彼らの依存関係を持っているもののみのDLL /拡張をロードできるようにしたい:私はすでに(StackOverflowの上のどこかにあります)次のコードを使用して、特定のDLLが存在するかどうかをチェックする方法を見つけました満足。

+0

ネイティブDLLに依存するアセンブリを作成していて、ネイティブDLLがない場合にMEFでこのアセンブリを無視したいと言っていますか? –

答えて

3

MEFはこれを拒絶反応によって自然に行う。拡張Bが存在する場合にのみ、拡張Aが読み込まれるようにしたいとします。おそらくこれは、拡張Aは、拡張Bが提供するいくつかの機能に依存するからです。 MEFでこれを表現する方法は、インポート(基数ExactlyOne、コレクションのインポートではなく、オプションではない)です。

エクステンションAは、エクステンションBからのエクスポートによって満たされる必要なインポートを持つ必要があります。エクステンションBが存在しない場合、インポートは満たされず、エクステンションAは拒否されます。コンテナでは使用できません。

これについて私のブログ記事:How to Debug and Diagnose MEF Failuresで少し詳しく説明します。

+0

面白い!他の拡張機能のインポートについては決して考えなかった。しかし、私が使用しようとしている他の拡張機能を制御できない場合はどうすればよいでしょうか?つまり、自分自身をエクスポートするのではなく、購読できるサービス(イベント)だけを提供するということです。私は単純に 'IMPORT'できないようなケースを処理する方法はありますか? – ashokgelal

+0

@chown拡張機能を直接エクスポートする必要はありません。サービスのエクスポート(プロパティのエクスポートまたはプロパティのエクスポートを介して)を行うことができます。または、コードを管理できず、そのエクステンションにエクスポートを追加できないと言っていますか? –

関連する問題