Dagger 与 Guice 中的运行时值注入
Runtime value injection in Dagger vs. Guice
我正在将一个项目从 Guice 迁移到 Dagger,我正在尝试了解如何处理运行时的值注入。假设我有一个具有以下配置方法的 Guice 模块:
void configure() {
install(new FactoryModuleBuilder()
.build(InterfaceXFactory.class));
}
工厂接口,
public interface InterfaceXFactory{
ClassX getClassX(
@Assisted("a") String a,
@Assisted("b") Integer b);
}
最后:
ClassX(
final @Assisted("a") String a,
final @Assisted("b") Integer b) {
/.../
}
这种配置的匕首相当于什么?根据我发现的内容,我可以使用 AutoFactory,但我对 API 的理解不够深入,我不知道这在 Dagger 中会是什么样子。也许这也不是最好的方法。
如何将此示例转换为 Dagger,以便我可以获得与 Guice 实现相同的功能?非常感谢您的帮助!
Dagger 在 2.31 版本中添加了它自己的 assisted injection,因此没有太多变化。
工厂接口需要注解@AssistedFactory
:
@AssistedFactory
public interface InterfaceXFactory{
ClassX getClassX(
@Assisted("a") String a,
@Assisted("b") Integer b);
}
构造函数需要注解@AssistedInject
:
@AssistedInject
ClassX(
final @Assisted("a") String a,
final @Assisted("b") Integer b) {
/*...*/
}
无需向模块添加任何内容; Dagger 会自己找到 InterfaceXFactory
。
我正在将一个项目从 Guice 迁移到 Dagger,我正在尝试了解如何处理运行时的值注入。假设我有一个具有以下配置方法的 Guice 模块:
void configure() {
install(new FactoryModuleBuilder()
.build(InterfaceXFactory.class));
}
工厂接口,
public interface InterfaceXFactory{
ClassX getClassX(
@Assisted("a") String a,
@Assisted("b") Integer b);
}
最后:
ClassX(
final @Assisted("a") String a,
final @Assisted("b") Integer b) {
/.../
}
这种配置的匕首相当于什么?根据我发现的内容,我可以使用 AutoFactory,但我对 API 的理解不够深入,我不知道这在 Dagger 中会是什么样子。也许这也不是最好的方法。
如何将此示例转换为 Dagger,以便我可以获得与 Guice 实现相同的功能?非常感谢您的帮助!
Dagger 在 2.31 版本中添加了它自己的 assisted injection,因此没有太多变化。
工厂接口需要注解@AssistedFactory
:
@AssistedFactory
public interface InterfaceXFactory{
ClassX getClassX(
@Assisted("a") String a,
@Assisted("b") Integer b);
}
构造函数需要注解@AssistedInject
:
@AssistedInject
ClassX(
final @Assisted("a") String a,
final @Assisted("b") Integer b) {
/*...*/
}
无需向模块添加任何内容; Dagger 会自己找到 InterfaceXFactory
。