я так и не понял, какая разница между конструктор и интерфейс инджекшен, мне вот всегда казалось, что интерфейс инджекшен - это то же, что и сеттер инджекшен, но вот только методы для зависимости описываются на уровне абстракции, к примеру есть интерфейс LoggerAwareInterface, в нем есть метод setLogger и di механизм после создания нового обьекта проверяет, если созданный обьект имплементит LoggerAwareInterface, то di механизм инджектит новосозданному обьекту обьект логгера через метод setLogger, в зенд фремворке вроде были обьекты инициалайзеры, которые вызывались сразу после создания нового обьекта в di механизме и занимались похожими действиями
@AvitoTech Жыл бұрын
Добрый день! В первоисточнике martinfowler.com/articles/injection.html#InterfaceInjection Мартин Фаулер приводит пример. В нём он создаёт класс, который имплементирует интерфейс и затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам. На наш взгляд идея получилась достаточно абстрактной, поэтому в разных языках программирования и библиотеках реализация данного подхода происходит по-разному. К сожалению, из-за этого нам было сложно обобщить исходный пример и реальные реализации, используемые разработчиками.
@sergeypoprygin2670 Жыл бұрын
@@AvitoTech >затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам в контейнере регистрируется класс, который сам будет инджектить зависимость новосозданому обьекту, инджектор, в моем примере это инициалайзер, у Фаулера в статье это FinderFilenameInjector, который инджектит строку через метод интерфейса injectFilename обьекту Object target
@VorobyevAlexander Жыл бұрын
Чаще через конструктор. Иногда, когда конструктор получается с большим числом параметров, создаю специальный контейнер , с геттерами. И передаю только его. За счет этого возможна и ленивая инициализация.
@Varkatel Жыл бұрын
Мартин Фаулер и Роберт Мартин - это три разных человека