1

我有一个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;
    }
}

我将此标记为共享导出,因为我一次只需要一个实例,但是如果我重新分配[Import]此类的 MEF ed 实例(通过Deserialize在分配中调用),它仍然是单例吗?另外,其他 Imported 实例会反映这一点吗?

4

1 回答 1

2

PartCreationPolicy仅适用于 MEF 创建的零件。您的Deserialize方法不使用 MEF,因此它将创建一个新实例。由 MEF 创建和管理的实例将不会更新以匹配新实例。

于 2012-12-18T19:22:49.380 回答