Я думаю, что в основном у вас есть два варианта:
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) Используйте Assisted Inject для создания фабрики, которая будет принимать ваше значение в качестве параметра и возвращать экземпляр 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 создаст его для вас.