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