Можно ли использовать интерфейс в качестве параметра для слабой связи?
В большинстве примеров внедрения зависимостей, которые я видел, зависимости вводятся в конструктор. В моей ситуации я не могу внедрить зависимость через конструктор или какой-либо инструмент DI. Итак, у меня есть интерфейс в качестве параметра метода. Я хотел бы знать, если это плохой подход и какие недостатки он имеет по сравнению с инжектором конструктора.
3 ответа
Нет ничего плохого в зависимости на уровне метода (то есть что-то, что является зависимостью только для одного метода), и нет ничего плохого в передаче этой зависимости как интерфейса.
Это вполне приемлемо.
Некоторые предостережения:
Если метод не называется "Init", его следует использовать только в этой функции (в противном случае это очень запутанно для пользователей класса).
Убедитесь, что все вызывающие функции имеют доступ к необходимому интерфейсу (очевидно).
У меня нет никаких "недостатков", вы просто передаете параметр:)
Совершенно нормально передать свою зависимость методу, на самом деле это одна из разрешенных / принятых парадигм принципа внедрения зависимостей, то есть
Внедрение в конструктор - где вы передаете свою зависимость через конструктор. Наиболее широко используемая парадигма.
Внедрение свойства / Внедрение сеттера - где вы передаете свою зависимость, используя свойство. Опять одна из наиболее широко используемых парадигм. А также,
Внедрение метода - где вы передаете свою зависимость, используя метод.
Теперь есть определенные преимущества / недостатки использования метода инъекций. Одно очевидное преимущество заключается в том, что метод инъекции является абсолютно необязательным. Если вам не нужна зависимость в конкретном экземпляре, просто не вызывайте метод, который внедряет зависимость. С другой стороны, при вызове какого-либо другого метода класса, которому требуется доступ к зависимости, вам потребуется проверка, чтобы убедиться, что зависимость уже введена.