java - 如何在使用 GIN 注入(inject)期间传播值

标签 java gwt dependency-injection gwt-gin

我想用 GIN 在某处注入(inject) A 类。 A 类构造函数需要一个在运行时知道的 id 加上另外两个类 B 和 C。B 和 C 构造函数需要与 A 相同的 id 作为参数。

这里是类的例子。

public class A {
   @Inject
   public A(String id, B b, C c)
   {
    ...
   }
}

public class B {
   @Inject
   public B(String id)
   {
    ...
   }
}

public class C {
   @Inject
   public C(String id)
   {
    ...
   }
}

如何在 A 注入(inject)期间将 id 传播到所有类?

一种解决方案是使用具有所有三个类的创建方法的 AssistedInjectionFactory,但这需要修改 A 构造函数才能使用工厂实例化 B 和 C。

还有其他方法可以使用 GIN 并避免 A 构造函数样板代码吗?

最佳答案

我会使用 @Named 注释,根据您希望如何计算 id 值,bindConstant 方法或 Provider:

...
@Inject public A(@Named("myId") String id, B b, C c)
...
@Inject public B(@Named("myId") String id)
...
@Inject public C(@Named("myId") String id)


public class MyModule extends AbstractGinModule {

  protected void configure() {
    // You can use bindConstant and compute the id in configure()
    String myid = "foo_" + System.currentTimeMillis();
    bindConstant().annotatedWith(Names.named("myId")).to(myId)
  }

  // Or you can use a provider to compute your Id someway 
  @Provides @Named("myId") public String getMyId() {
    return "bar_" + System.currentTimeMillis();
  }      

}

关于java - 如何在使用 GIN 注入(inject)期间传播值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099927/

相关文章:

php - Slim Framework 3 - 如何将 $logger 注入(inject)路由 Controller

XHTML 上出现 Java EE 404 错误,但 HTML 上没有

java - 如何在android中部分改变文本的颜色

eclipse - 安装Maven Integration for Eclipse WTP时出错

java - 关闭 Gmail 上下文小工具

grails - 使用junit在grails 2.5中设置集成测试的正确方法是什么?

angularjs - 使用 RequireJS 延迟加载 AngularJS DI 组件

java - 在 CentOS 5.6 上编译 java 时出现问题

Java - Servlet post 参数编码错误

java - 如何在 iPhone 中查看 Google 网络应用程序