当前位置: 首页 > 面试题库 >

我可以在Dagger中使用某种辅助注射吗?

堵琨
2023-03-14
问题内容

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

class SomeEditor {


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

}

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

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

在Dagger中有类似的方法吗?


问题答案:

因为工厂是一种单独的样板,可以进行优化(请参阅此处的邮件列表讨论),所以Dagger将其留给了姊妹项目AutoFactory。这提供了Guice通过FactoryModuleBuilder提供的“
辅助注入
”功能,但具有一些额外的好处:

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

例如,来自AutoFactory自述,这将产生一拉SomeClassFactoryprovidedDepA@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;
  }

  // …
}


 类似资料:
  • 问题内容: 来自dagger-discuss @: 我有一个类,它从对象图中获取一些依赖关系,而在运行时从调用者那里获取其他依赖关系。 我想出了一个解决方案,定义了一个工厂, 现在,我不再注入客户端的构造函数,而是直接注入并调用其方法。 如您所见,这很冗长且冗长。它还有很多重复和样板。使用来注释字段本身存在一些障碍,因此让我们暂时忽略这种可能性。 Square人员使用提供程序提出了一个有趣的解决方

  • 我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con

  • 我是的新手,我的应用程序中需要。当我在maven上查找Jar时,我看到有两个: org.sonatype.sisu.inject com.google.inject.extensions Sonatype版本是最近更新的,并且有一个更新的版本号,但它实际上是谷歌和Guice官方支持的吗?还是它自己的Nexus的东西?

  • 我是Guice的新手,所以我试图理解AssistedInject。我有一个非常简单的项目: 我要注入的类: 带辅助注射的类别: 工厂 主类: 但它仍然不起作用,我不明白,我错在哪里?

  • 我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar

  • 我目前正在我的应用程序中使用Guice。然而,我发现自己大多使用辅助注入,因为有一个注入对象链,它们都依赖于程序的输入。因此几乎所有的东西都是辅助注射的。 例如,A需要B,B需要c,c需要Z,Z需要来自命令行的输入。最后我感觉一切都将被辅助注射。因此,鉴于我坚持使用它,我想确定我使用它是正确的。 我个人觉得写我自己的工厂也一样好。此外,除了同样的优点之外,我还可以进一步将我所讨论的对象的创建限制在