C# 我可以重新分配MEF共享导出吗?
我有一个类是C# 我可以重新分配MEF共享导出吗?,c#,silverlight,prism,mef,C#,Silverlight,Prism,Mef,我有一个类是DataContract序列化的,也被标记为共享MEF[Export] 例如: [DataContract(Name="MyClass")] [Export(typeof(MyClass))] [PartCreationPolicy(CreationPolicy.Shared)] public class MyClass { [DataMember] public string Field1{get;set;} [DataMember] public
DataContract
序列化的,也被标记为共享MEF[Export]
例如:
[DataContract(Name="MyClass")]
[Export(typeof(MyClass))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class MyClass
{
[DataMember]
public string Field1{get;set;}
[DataMember]
public string Field2{get;set;}
public static MyClass Deserialize(XElement serialized)
{
DataContractSerializer ser = new DataContractSerializer(typeof(MyClass));
MyClass anotherMyClass = (MyClass)ser.ReadObject(serialized.CreateReader());
return anotherMyClass;
}
}
我将其标记为共享导出,因为我一次只需要一个实例,但如果我重新分配此类的MEF
[Import]
ed实例(通过在分配中调用反序列化
),它还会是单例吗?另外,其他导入的实例是否也反映了这一点?PartCreationPolicy仅适用于MEF创建的零件。您的反序列化
方法不使用MEF,因此它将创建一个新实例。MEF创建和管理的实例将不会更新以匹配新实例。谢谢。我现在了解到,只有当实例使用MEF时,才会强制执行singleton。我想确保我提供了关于重新分配部分的足够详细的信息。假设我有两个视图模型,ViewModel1
和ViewModel2
,它们都导入了MyClass
。如果ViewModel1
重新分配导入的MyClass
实例,则ViewModel2
仍在使用重新分配前导入的实例?我相信你是这么说的,只是想确定一下。再次感谢@伊森:是的,没错;如果ViewModel1
将导入的MyClass
实例替换为新实例,则ViewModel2
将看不到该更改。但是,如果ViewModel1
更改了导入实例的属性,则该更改将对ViewModel2
可见,因为它们都在查看同一实例。