У меня нет удобных опубликованных или официальных примеров, но все описанные вами ситуации работают нормально.Необычно, когда инжекция поля комбинируется с инжекцией конструктора, потому что поля обязательно не являются final
для работы с инжекцией поля, где они могут быть окончательными, если передаются через конструктор.Менее необычно видеть внедрение метода без внедрения конструктора, для случаев саморегистрации, аналогичных описанному выше методу enableStreaming
, но это все же несколько необычный вариант использования.
Хотя поле ивнедрение метода может происходить внутри внедряемого метода или класса, это потребует получения конкретного экземпляра компонента или MembersInjector<T>
для вашего класса T
, что по меньшей мере так же сложно вызвать, как component.inject(exampleObject)
в третьем примере.выше.В конце концов, весь смысл внедрения зависимостей состоит в том, чтобы позволить вызывающей стороне контролировать зависимости класса, так что это, возможно, ослабление DI для класса-владельца, чтобы контролировать, предоставляются ли и как его зависимости.
Единственные случаи, когда я могу придумать, где класс будет управлять своим собственным внедрением, - это если ваш класс хотел бы ввести себя условно - if (BuildOptions.FEATURE_X_ENABLED) { injector.inject(this); }
, - но на ум приходит много других шаблонов, которые лучше справятся с этим типом случаев.