MEF:导入的字段值未更新

时间:2010-11-02 00:28:34

标签: import export mef

我正在尝试将名为Settings的字段从我的主窗体导出到插件,如下面的代码所示。我正在使用名为CreateSettings()的主窗体函数来更新private _settings字段。但是,当我这样做时,导入的插件设置永远不会更改,并始终是原始初始化值“defaultname”和“defaultpass”。我不确定发生了什么事?

主要表格:

public partial class Form1 : Form
{
    [Export(typeof(ISettings))]
    private Settings _settings = new Settings("defaultname", "defaultpass");

    private void CreateSettings(name, password)
    {
        _settings = new Settings(name, password);
    }
}

插件控件:

[Export(typeof(IPlugin))]
public partial class MyPlugin : UserControl, IPlugin
{       
    [Import(typeof(ISettings))]
    private Settings _settings;         
}

设置类:

public class Settings : ISettings
{
    public string Name { get; set; }
    public string Password { get; set; }

    public Settings()
    {
    }

    public Settings(string name, string pass)
    {
        Name = name;
        Password = pass;
    }
}

1 个答案:

答案 0 :(得分:3)

解决导入后,将原始导出更改为新实例不会更新导入类。如果您需要实际更改实例引用,一个选项是将其包装在其引用不会更改的其他对象中并导入该引用。

或者,您可以使用概述here的技术执行动态重组。我认为简单地导入暴露可变设置实例的上下文“服务”是更清晰的。