MEF: импортированное значение поля не обновляется - PullRequest
0 голосов
/ 02 ноября 2010

Я пытаюсь экспортировать поле под названием «Настройки» из моей главной формы в плагин, как показано в коде ниже.Я использую функцию Main Form под названием CreateSettings (), чтобы обновить приватное поле _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 Ответ

3 голосов
/ 02 ноября 2010

Как только импорт будет разрешен, изменение исходного экспорта на новый экземпляр не приведет к обновлению импортирующих классов.Если вам действительно нужно изменить ссылку на экземпляр, один из вариантов - заключить его в какой-то другой объект, ссылка на который не изменится, и импортировать эту ссылку.

В качестве альтернативы, вы можете выполнить динамическое перекомпонование, используя технику, какизложил здесь .Я думаю, что проще импортировать контекстный «сервис», который предоставляет изменяемый экземпляр настроек.

...