假设我们有2个类-Main
和MainDependency
。第二类仅由Main
使用,使用IoC的目的是构造Main
类的实例。MainDependency
类具有整数类型的字段。不需要设置此字段(或者,假设没有其他指定,则该字段应始终具有默认值)。
问题:设置整数字段的最正确方法是什么?我看到的一种方法是在Module
中创建类似的字段,然后在configure
模块中使用该值。但是我觉得这是错误的方式。
请分享您的经验。提前谢谢。
最佳答案
我认为您主要有两种选择:
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将为您创建它。