如何在使用 GIN 注射过程中传播值



我想用 GIN 在某处注入 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 注入期间将 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();
  }      
}

相关内容

  • 没有找到相关文章

最新更新