作者:ET | 来源:互联网 | 2023-05-17 09:38
使用Google Guice或Gin我可以指定参数不受依赖注入框架控制:
class SomeEditor {
@Inject
public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) {
}
}
辅助参数stage
在SomeEditor
创建实例时指定.
SomeClassA的实例取自对象图,SomeClassB的实例在运行时从调用者获取.
在Dagger中有类似的方法吗?
1> Jeff Bowman ..:
因为工厂是一种独立的样板来进行优化(参见此处的邮件列表讨论),Dagger将其留给了一个姐妹项目AutoFactory.这提供了Guice通过FactoryModuleBuilder提供的" 辅助注入 "功能,但具有一些额外的好处:
您可以继续使用带有Guice或Dagger的AutoFactory或任何其他JSR-330依赖注入框架,这样即使您在它们之间切换,也可以继续使用AutoFactory.
因为AutoFactory生成代码,所以您不需要编写一个接口来表示构造函数:AutoFactory将编写一个全新的类型供您编译.(如果您愿意,也可以指定要实现的接口,或者如果您要从Guice迁移.)
因为所有类型检查都是在编译时发生的,所以它会产生普通的旧Java,它不会因为反射而变慢,并且适用于调试器和优化器.这使得Auto库对Android开发特别有用.
例如,来自AutoFactory自述,这将产生一拉SomeClassFactory
带providedDepA
在@Inject
-annotated构造函数和depB
在一个create
方法:
@AutoFactory
final class SomeClass {
private final String providedDepA;
private final String depB;
SomeClass(@Provided @AQualifier String providedDepA, String depB) {
this.providedDepA = providedDepA;
this.depB = depB;
}
// …
}