私はあなたが主に2つのオプションがあると思う:
1)一定のバインディングを使用してそれを注入します。インスタンス化時にMY_CONSTANT
という値をModule
に渡すことができます。システムプロパティから取得することも、他の方法で取得することもできます。
class MainDependency{
@Inject
public MainDependency(@Named("myConst") int myConst){
//...
}
}
class Module extends AbstractModule{
public void configure(){
bindConstant().annotatedWith(Names.named("myConst").to(MY_CONSTANT);
}
}
2)は、パラメータとして、あなたの値を取り、MainDependency
のインスタンスを返します。ファクトリを作成するために補助注入を使用します。
interface MainDependencyFactory{
MainDependency create(int myConst);
}
class MainDependency{
@Inject
public MainDependency(@Assisted int myConst){
//..
}
}
class Module extends AbstractModule{
public void configure(){
bind(MainDependencyFactory.class).toProvider(
FactoryProvider.newFactory(MainDependencyFactory.class, MainDependency.class));
}
}
//to use the above, instantiate your factory (or inject it somewhere)
MainDependencyFactory f = injector.getInstance(MainDependencyFactory.class);
//Then you can create MainDependency with any value
MainDependency md = f.create(MY_CONSTANT);
注補助注入して、あなたが実装する必要はありませんMainDependencyFactory
。 Guiceはあなたのためにそれを作成します。