Особые настройки детали с помощью MEF - PullRequest
3 голосов
/ 25 мая 2009

У нас есть интерфейс, который будет реализован классами которые заботятся о передаче данных через сеть или com порты, например.

Давайте сейчас назовем его IDataTransporter, и у нас есть 2 реализации:

ComPortDataTransporter и TcpDataTransporter.

Очевидно, что эти два требуют очень разных конфигураций.

Первый имеет такие настройки, как buadrate, start / stop биты и т. Д. второй имеет настройки, такие как IP-адрес и порт.

Есть ли лучшие практики для борьбы с этим? В конце мы хотим, чтобы пользователь мог загрузить «часть» и настроить его один раз.

Thnx.

1 Ответ

4 голосов
/ 25 мая 2009

Возможно, вы могли бы экспортировать какую-то часть конфигурации вместе с вашей частью транспортера.

Допустим, ваше хост-приложение определяет интерфейс:

public interface IDataTransporterSettings 
{
    // any common settings are defined here
}

... и предполагает, что любой IDataTrasporter имеет открытое свойство этого типа:

public interface IDataTransporter
{
    IDataTransporterSettings Settings { get; }
}

... тогда ваши «настройки» могут быть классом с набором открытых свойств, соответствующих каждому из параметров:

public class TcpDataTransporterSettings : IDataTransporterSettings
{
    public string Address { get; set; }
    public int Port { get; set; }
}

Ваш класс TcpDataTransporter всегда будет считывать из своего свойства Settings, чтобы определить его адрес / порт / что угодно.

Теперь ваше хост-приложение может использовать отражение для проверки настроек каждой импортированной части транспортера и отображения соответствующего элемента управления для каждого открытого настраиваемого свойства (TextBox для строк, NumericUpDown для целых и т. Д.).

Думаю, немного поработав, вы могли бы добавить понятные человеку описания к каждому свойству через атрибуты, чтобы вы могли определить метку для каждого элемента управления в пользовательском интерфейсе.

Я не до конца продумал это, и, конечно, я его нигде не реализовал, но, похоже, это может быть способом обеспечить гибкие настройки для каждой импортируемой детали.

...