背景: 私はMEFに、IFooを実装する2つのアセンブリをインポートしようとしています。そのために、当然のことながら、[ImportMany]を使用してすべてをインポートし、IEnumerable>を取得しています。次に、私の消費ロジックは、メタデータ「バー」に基づいて、インポートされたアセンブリのどれを使用するかを決定します。
各エクスポーターは、ExportMetadata属性で装飾されています。これは、次の場合に正常に機能します。
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello")]
public class Hello : IFoo
{...}
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "World")]
public class World: IFoo
{...}
つまり、私のIEnumerableには2つのIFooがあります。
1つをデフォルトとして定義したいので、「Hello」も「World」も必要ない場合は、Barメタデータとして「Default」を使用するものを探します。私は次のようなIsMultipleプロパティを使用してこれを実行しようとしました:
[Export(typeof(IFoo))]
[ExportMetadata("Bar", "Hello", IsMultiple = true)]
[ExportMetadata("Bar", "Default", IsMultiple = true)]
public class Hello : IFoo
{...}
問題: IsMultipleプロパティと2番目の属性を追加すると、Helloクラスが結果のIEnumerableにプルされなくなります。
質問: MEFのクラスに2番目/デフォルトの指定でタグを付けるにはどうすればよいですか?
ありがとう!