Внедрение свойств в статический класс с помощью Simple Injector

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

Может ли кто-нибудь объяснить на простом примере, как работает внедрение свойств?

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


person Dhwani    schedule 27.09.2017    source источник
comment
Что не понятно объяснил? Он объясняет, как ведут себя некоторые другие, почему он не включен по умолчанию и как вы можете его перезаписать. Является ли ваш класс статическим или методом, который вы хотите вызвать? Если это класс, то я не вижу для вас возможности его внедрить. Может быть, вам следует добавить его как часть внедрения конструктора вашего контроллера?   -  person Icepickle    schedule 27.09.2017
comment
Метод статический. И этот метод класса напрямую вызывается из макета, поэтому на картинке не будет контроллера.   -  person Dhwani    schedule 27.09.2017
comment
Было бы хорошо обновить ваш вопрос и предоставить больше контекста. Покажите свой вариант использования, покажите класс, в который вы хотите внедрить зависимость. Опишите, что это за зависимость. Покажите, как вы собираетесь использовать это свойство.   -  person Steven    schedule 27.09.2017


Ответы (1)


В документации не объясняется, как внедрить статическое свойство, потому что это не поддерживается в Simple Injector.

Статические свойства, как правило, плохая идея, потому что они мешают тестированию, вызывают временную связь и может вызвать захватывающие зависимости.

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

Пример:

var container = new Container();

// Make registrations to container here:

container.Verify();

Utility.MyStaticProperty = container.GetInstance<IDependency>();

В нормальных условиях Simple Injector обнаружит эти типы несоответствия образа жизни, но не сможет сделать это, если вы введете это свойство самостоятельно.

person Steven    schedule 27.09.2017
comment
If a static property is required, you will have to inject the dependency yourself. You can do that in the Composition Root, right after you made all the registrations to the Container. - Есть такой же пример? - person Dhwani; 27.09.2017