我认为除了创建自己的POJO之外,没有一种惯用的方法可以做到这一点,这可能很好。
@组件的值
inject(T)
方法或
MembersInjector<T>
事实就是这样
如何请求Dagger基于的对象
T
的
@Inject
注释
. 如果Dagger没有扫描类并为您生成对象,那么您将负责填充对象,因此您最好编写自己的初始值设定项。
class YourTypeInitializer { // nothing to extend or implement
private final Provider<A> aProvider;
private final Provider<B> bProvider;
@Inject YourTypeInitializer(Provider<A> aProvider, Provider<B> bProvider) {
this.aProvider = aProvider;
this.bProvider = bProvider;
}
public YourType inject(YourType instance) {
instance.initialize(aProvider.get(), bProvider.get());
return instance; // for convenience
}
}
或现场注入:
class YourTypeInitializer {
@Inject Provider<A> aProvider;
@Inject Provider<B> bProvider;
@Inject YourTypeInitializer() {}
public YourType inject(YourType instance) {
instance.initialize(aProvider.get(), bProvider.get());
return instance; // for convenience
}
}
然后,而不是注射
MembersInjector<YourType>
,只需注入
YourTypeInitializer
; 而不是打电话
yourComponent.inject(yourTypeInstance)
,只需打电话
yourComponent.getYourTypeInitializer().inject(yourTypeInstance)
. 这有点陈词滥调,但没有
@注入
作为替代品,Dagger几乎无法为您提供任何注释。