这可能很简单,但由于我是 MEF 竞技场的新手,所以我很难找出解决问题的方法。
我正在开发一个使用 WPF + Prism 和 MEF 作为 DI 容器的应用程序。我想将我的对象(即RuleFile
)与每个应用程序实例关联起来,方法是将它与文件说 RuleFile1.ruleapp 相关联。因此,我用属性[PartCreationPolicy(CreationPolicy.Shared)]
对其进行了修饰,将其视为单例,以便在整个应用程序中与每个应用程序实例保持相同。
[Serializable()]
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class RuleFile : NotifyPropertyChanged, IRuleFile { }
接下来,在[ImportingContructor]
如下所示的 ViewModel 时,对象与想要的一样。
[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 容器中的反序列化对象交换/替换导出的对象?