我正在尝试将名为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;
}
}
答案 0 :(得分:3)
解决导入后,将原始导出更改为新实例不会更新导入类。如果您需要实际更改实例引用,一个选项是将其包装在其引用不会更改的其他对象中并导入该引用。
或者,您可以使用概述here的技术执行动态重组。我认为简单地导入暴露可变设置实例的上下文“服务”是更清晰的。