2011-09-22 5 views
2

デフォルトでは、ImportAttributeは、正確に1つの部分が属性で指定されたコントラクトを満たす必要があります。この現象は、ImportAttribute.AllowDefaultプロパティで変更できます。基本的には、これにより、ゼロまたは1つのパーツが契約を満たすことができるように動作が変更されます。パーツがない場合は、そのインポートのデフォルト値が代わりに使用されます。ImportMany属性を使用する場合、少なくとも1つの部品をインポートする必要がありますか?

ImportManyAttributeは、0個以上の部分が契約を満たすことを許可します。 MEFは、空のコレクション、シングルトンコレクション、または検出された内容に応じた一連のパーツを使用して、このインポートを満たします。

MEFに空のコレクションが無効であると伝えるにはどうすればよいですか?

私がすべき:

  1. IPartImportsSatisfiedNotificationを実装し、コレクションが空の場合OnImportsSatisfiedから例外をスロー?
  2. 私自身のImportOneOrMoreAttributeを実装していますか?
  3. 何らかの欠けているMEFの機能を組み込みましたか?

答えて

4

MEFは、デフォルトで3つのカーディナリティ(ZeroOrOne、ExactlyOne、またはZeroOrMore)のみを認識します。 ImportCardinalityを参照してください。 MEFの属性の制約の中で自分自身を表現することはできません。 OnImportsSatisfiedで例外を投げることはお勧めしません。予想外の問題が発生する可能性が高いからです。

あなたができることは、ImportManyを使用して、これらのインポートを使用する際に確認するのが怖いです。

+1

私はしっとりと現実を受け入れる:( –

+0

これはうっかり、将来的にはOneOrMoreを追加することを望んでいる。 – Contango

関連する問題