2013-06-28 3 views
0

TL; DR Является ли плохой практикой передавать параметры времени для конструктора с помощью контейнера?.Неплохая практика передавать параметры через контейнер IoC?

В качестве примера я создаю решение WCF, которое имеет хосты служб, построенные динамически с использованием реализации ServiceHostFactoryBase. Эта фабрика - мой Composition Root; Он получает доступ к Unity, настраивает его и использует контейнер для разрешения ServiceHost. Однако этот ServiceHost должен получить доступ к некоторой конфигурации в базе данных, и для определения этой конфигурации используется «constructorString».

Поскольку Unity - это парень, создающий экземпляр моего ServiceHost, я не вижу другого решения, кроме прохождения параметра через ParameterOverride. Но мне это не нравится. Параметр не является зависимостью, это параметр, найденный во время выполнения. Кроме того,, ServiceHost зависит от еще одного класса, который также нуждается в «constructorString». Поэтому я буду полагаться на Единство, чтобы передать это.

Я использую Unity 3 в качестве контейнера IoC.

ответ

0

Считаете ли вы ошибочной практикой передавать параметры времени выполнения в конструктор с помощью контейнера?

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

«Зависимость времени компиляции» - это значение, известное во время компиляции или во время конфигурации (когда система запускается, а зависимости подключаются с помощью контейнера). Это позволяет контейнеру построить для вас графический объект.