使用Google Guice或Gin,我可以指定不受依赖项注入框架控制的参数:

class SomeEditor {


  @Inject
  public SomeEditor(SomeClassA a, @Assisted("stage") SomeClassB b) {
  }

}


在创建stage实例时指定辅助参数SomeEditor

SomeClassA的实例是从对象图中获取的,而SomeClassB的实例是从运行时的调用者获取的。

在Dagger中有类似的方法吗?

最佳答案

由于工厂是用于优化优化(see mailing list discussion here)的另一种样板,因此Dagger将其留给了姊妹项目AutoFactory。这提供了Guice通过assisted injection提供的“ FactoryModuleBuilder”功能,但具有一些额外的好处:


您可以继续将AutoFactory与Guice或Dagger或任何其他JSR-330依赖项注入框架一起使用,因此即使在它们之间进行切换,也可以继续使用AutoFactory。
因为AutoFactory会生成代码,所以您无需编写用于表示构造函数的接口:AutoFactory将编写一个全新的类型供您进行编译。 (如果愿意,或者从Guice迁移,也可以指定要实现的接口。)
因为所有类型检查都是在编译时进行的,所以它会生成普通的旧Java,它不会因反射而变慢,并且可以与调试器和优化器一起很好地工作。这使得Auto库对于Android开发特别有用。


例如,从AutoFactory的README中提取的,它将在SomeClassFactory注释的构造函数中生成带有providedDepA@Inject,并在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;
  }

  // …
}

10-06 11:19