我想使用注释为@Provides
的方法将绑定创建为一个热切的单例。我找到bug 216,这表明这是不可能的,但没有明确提及@Provides
注释。
我目前有一个课程要求eager
单身人士及时成为单身人士,但这不是一个很好的解决方案。
public class LogicModule extends AbstractModule {
@Override public void configure() {
bind(SomeDep.class);
bind(MyWorkaround.class).asEagerSingleton();
}
// cannot add eager requirement here
@Provides @Singleton Logic createLogic(SomeDep dep) {
return LogicCreator.create(dep);
}
private static class MyWorkaround {
@Inject Logic logic;
}
}
我是否可以更改评论附近会使解决方法类过时的内容?
答案 0 :(得分:11)
为什么不使用
bind(Logic.class).toInstance(LogicCreator.create(dep));
//ohh we missing dep
然后我们可以做到这一点
class LogicProvider implements Provider<Logic> {
private final SomeDep dep;
@Inject
public LogicProvider(SomeDep dep) {
this.dep = dep;
}
@Override
public Logic get() {
return LogicCreator.create(dep);
}
}
然后
bind(Logic.class).toProvider(LogicProvider.class).asEagerSingleton();
您甚至可以SomeDep dep
将Provider<SomeDep>
传递给您的提供商,然后在providerDep.get()
中致电LogicCreator.create()
,这会更加强大。