Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以重新分配MEF共享导出吗?_C#_Silverlight_Prism_Mef - Fatal编程技术网

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
可见,因为它们都在查看同一实例。