アプリケーションで MEF を IOC として使用しています。アプリケーション内のクラス (すべてのスレッドで) に対して、一度に 2 つのインスタンスが必要な状況に陥っていることに気付きました。export 属性を別のコンテナー名で 2 回追加し、そのコンテナー名を使用して 2 つのインスタンスを作成するだけで簡単だと思いました。
[Export("Condition-1",typeof(MyClass)]
[Export("Condition-2",typeof(MyClass)]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.Shared)]
public class MyClass { }
そして、それらを次のようにエクスポートします
Container.GetExport<MyClass>("Condition-1").Value
Container.GetExport<MyClass>("Condition-2").Value
しかし、このトリックはうまくいきませんでした。CompsositionBatch を使用して、ようやく問題を解決できました
cb.AddExportedValue<MyClass>("Condition-1",new MyClass());
cb.AddExportedValue<MyClass>("Condition-2",new MyClass());
しかし、私の質問は、契約名に基づいて異なるインスタンスを取得できないのはなぜですか. CreationPolicy が共有されている場合、コントラクト名は関係ないというのは正しいですか?