我想用 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/