これは簡単かもしれませんが、私は MEF アリーナに慣れていないため、問題の解決策を見つけるのに苦労しています。
MEFをDIコンテナとしてWPF + Prismを使用するアプリケーションに取り組んでいます。RuleFile
RuleFile1.ruleapp などのファイルに関連付けることで、オブジェクト (つまり) を各アプリケーション インスタンスに関連付けたいと考えています。そのため、属性で装飾し[PartCreationPolicy(CreationPolicy.Shared)]
てシングルトンとして扱い、各アプリケーション インスタンスでアプリケーション全体で同じままになるようにしました。
[Serializable()]
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class RuleFile : NotifyPropertyChanged, IRuleFile { }
次に、以下のように ViewModel のとき[ImportingContructor]
、目的のオブジェクトは同じです。
[ImportingConstructor]
public RuleViewModel(RuleFile ruleFile)
[ImportingConstructor]
public SchemaViewModel(RuleFile ruleFile)
これまでのところ、すべてがスムーズです。
以下のコードを使用して、上記のようにビューモデルに渡される同じエクスポートされたオブジェクトを取得しようとしていますが、container.GetExportedValue<IRuleFile>()
同じではない新しいオブジェクト参照を提供しています:
var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
var exportObj = container.GetExportedValue<IRuleFile>();
質問 1:オブジェクトは、シングルトン オブジェクトと同じであるはずなのに、異なる参照を取得するのはなぜCreationPolicy.Shared
ですか?
質問 2:RuleFile
最終的には、エクスポートされたオブジェクトを MEF DI コンテナー内の逆シリアル化されたオブジェクトと交換/置換するためにすべての作業が行われますか?