【问题标题】:Can I reassign an MEF Shared export?我可以重新分配 MEF 共享导出吗?
【发布时间】:2012-12-18 19:03:36
【问题描述】:

我有一个 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 实例(通过在分配中调用 Deserialize)它仍然是单身人士?另外,其他 Imported 实例会反映这一点吗?

【问题讨论】:

    标签: c# silverlight prism mef


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我现在明白,只有在实例使用 MEF 时才会执行单例。我想确保我提供了有关重新分配部分的足够详细信息。假设我有两个视图模型,ViewModel1ViewModel2,它们都导入 MyClass。如果ViewModel1 重新分配其导入的MyClass 实例,那么ViewModel2 是否仍在使用它在重新分配之前导入的实例?我相信这就是你所说的,只是想确定一下。再次感谢!
    • @Ethan:是的,没错;如果ViewModel1 将其导入的MyClass 实例替换为新实例,则ViewModel2 将看不到该更改。但是,如果ViewModel1 更改了导入实例上的属性,则该更改ViewModel2 可见,因为它们都在查看同一个实例。
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2020-09-05
    相关资源
    最近更新 更多