.NET: выбор конкретных классов с помощью файла конфигурации - PullRequest
1 голос
/ 25 октября 2008

(Этот вопрос конкретно в C #, но в целом относится к .NET)

У меня большое приложение, которое имеет довольно хороший дизайн и разбито на основные разделы по интерфейсам (это было сделано, чтобы помочь параллельной разработке).

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

На данный момент мы объединяем все эти классы на верхнем уровне в коде:

IMyInterface xComponent = new ConcreteXComponent1();

Если я хочу поменять компоненты, мне нужно только изменить эту строку и перекомпилировать:

// IMyInterface xComponent = new ConcreteXComponent1();
IMyInterface xComponent = new ConcreteXComponentAlternative();

Это прекрасно работает, но, очевидно, требует перекомпиляции - я бы предпочел, чтобы конкретный класс был выбран с использованием значения из файла конфигурации.

Какой стандартный шаблон для изменения конкретных классов с использованием файла конфигурации? Есть ли стандартная библиотека, которую я могу использовать, чтобы решить эту проблему для меня?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 25 октября 2008

Вы хотите посмотреть на контейнеры IoC. (Spring.NET, StructureMap, Windsor и т. Д.)

2 голосов
/ 25 октября 2008

Вы можете использовать метод Activator.CreateInstance. Один из методов перегрузки принимает имя типа и создает его экземпляр, используя конструктор по умолчанию. Затем вы можете сохранить имя типа класса в вашем конфигурационном файле и прочитать его из вашего приложения.

1 голос
/ 25 октября 2008

Попробуйте заводской шаблон

http://en.wikipedia.org/wiki/Abstract_factory_pattern

0 голосов
/ 25 октября 2008

Использование контейнера IoC создаст пул или коллекцию ваших объектов, которые вы можете динамически загружать. Фреймворки, предложенные Роменом, будут использовать файл конфигурации, в котором описаны объекты и способы их создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...