Можно ли использовать интерфейс в качестве параметра для слабой связи?

В большинстве примеров внедрения зависимостей, которые я видел, зависимости вводятся в конструктор. В моей ситуации я не могу внедрить зависимость через конструктор или какой-либо инструмент DI. Итак, у меня есть интерфейс в качестве параметра метода. Я хотел бы знать, если это плохой подход и какие недостатки он имеет по сравнению с инжектором конструктора.

3 ответа

Решение

Нет ничего плохого в зависимости на уровне метода (то есть что-то, что является зависимостью только для одного метода), и нет ничего плохого в передаче этой зависимости как интерфейса.

Это вполне приемлемо.

Некоторые предостережения:

  1. Если метод не называется "Init", его следует использовать только в этой функции (в противном случае это очень запутанно для пользователей класса).

  2. Убедитесь, что все вызывающие функции имеют доступ к необходимому интерфейсу (очевидно).

У меня нет никаких "недостатков", вы просто передаете параметр:)

Совершенно нормально передать свою зависимость методу, на самом деле это одна из разрешенных / принятых парадигм принципа внедрения зависимостей, то есть

Внедрение в конструктор - где вы передаете свою зависимость через конструктор. Наиболее широко используемая парадигма.

Внедрение свойства / Внедрение сеттера - где вы передаете свою зависимость, используя свойство. Опять одна из наиболее широко используемых парадигм. А также,

Внедрение метода - где вы передаете свою зависимость, используя метод.

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

Другие вопросы по тегам