.NET: выберите конкретные классы, используя файл конфигурации
(Этот вопрос конкретно в C#, но в целом относится к.NET)
У меня есть просторное приложение, которое имеет довольно хороший дизайн и разбито на основные разделы по интерфейсам (это было сделано, чтобы помочь параллельной разработке).
Теперь у нас есть основной набор конкретных классов, которые реализуют необходимые интерфейсы, но у нас также есть дополнительные наборы конкретных классов для альтернативных ситуаций и тестирования.
На данный момент мы объединяем все эти классы на верхнем уровне в коде:
IMyInterface xComponent = new ConcreteXComponent1();
Если я хочу поменять компоненты, мне нужно только изменить эту строку и перекомпилировать:
// IMyInterface xComponent = new ConcreteXComponent1();
IMyInterface xComponent = new ConcreteXComponentAlternative();
Это прекрасно работает, но, очевидно, требует перекомпиляции - я бы предпочел, чтобы конкретный класс был выбран с использованием значения из файла конфигурации.
Какой стандартный шаблон для изменения конкретных классов с помощью файла конфигурации? Есть ли стандартная библиотека, которую я могу использовать, чтобы решить эту проблему для меня?
Спасибо!
4 ответа
Вы хотите посмотреть на контейнеры IoC. (Spring.NET, StructureMap, Windsor и т. Д.)
Вы могли бы использовать Activator.CreateInstance
метод. Один из методов перегрузки принимает имя типа и создает его экземпляр, используя конструктор по умолчанию. Затем вы можете сохранить имя типа класса в вашем конфигурационном файле и прочитать его из вашего приложения.
Попробуйте заводской шаблон
Использование контейнера IoC создаст пул или коллекцию ваших объектов, которые вы можете динамически загружать. Фреймворки, предложенные Роменом, будут использовать файл конфигурации, в котором описаны объекты и способы их создания.