Есть ли лучшие способы создания интерфейсов с использованием внедрения зависимостей? - PullRequest
1 голос
/ 09 октября 2019

Я обнаружил, что занимаюсь этим;

IService service1;
IService service2;

SomeController(IService1 service1, IService2 service2)
{
    this.service1 = service1;
    this.service2 = service2;
}

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

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Существует четыре типа DI в C #

  • Инъекция конструктора
  • Инъекция сеттера или свойства
  • Инъекция метода
  • СервисИнъекция локатора

Вы уже использовали Constructor Injection, который является наиболее распространенным способом сделать это, другие альтернативы не обязательно лучше, но вы можете выбрать, какой из них более удобен дляЕсли вы хотите поработать, вы можете найти пример каждого из них здесь: https://www.c -sharpcorner.com / article / понимание-использования-зависимости-использования-конструктора-свойства-и-метода-в /

Вы также можете найти хорошее объяснение Когда использовать Инъекцию зависимостей свойств в Инжектор конструктора и наоборот? здесь :

* 1027Внедрение зависимости конструктора в C # является стандартом для внедрения зависимости. Он гарантирует, что все объекты зависимости инициализируются до того, как мы собираемся вызывать какие-либо методы или свойства объекта зависимости, в результате он избегает исключений нулевой ссылки.

Внедрение зависимости метода / свойства в C #редко используется в приложениях реального времени. Например, если у меня есть класс, который имеет несколько методов, но эти методы не зависят от каких-либо других объектов. Теперь мне нужно создать новый метод в том же классе, но этот новый метод теперь зависит от другого объекта. Если мы используем здесь инжекцию зависимости конструктора, то нам нужно изменить все существующие вызовы конструктора, в которых мы создали этот объект класса. Это может быть очень сложной задачей, если проект большой. Следовательно, в таких случаях хорошим выбором может быть внедрение зависимости или установщика свойства.

1 голос
/ 09 октября 2019

Вы используете «лучший» способ внедрения зависимостей, который доступен в .Net на данный момент, инжектор конструктора. Это также рекомендуемый способ внедрения зависимостей Марка Симанна в его книге Внедрение зависимостей в .Net :

ВСТУПЛЕНИЕ КОНСТРУКТОРА должно быть вашим выбором по умолчанию для DI. В нем рассматривается наиболее распространенный сценарий, когда классу требуется одна или несколько зависимостей, и нет доступных ЛОКАЛЬНЫХ ПО УМОЛЧАНИЙ.

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

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

...