我想使用注释@Provides为热切单例的方法进行绑定.我发现了错误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;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以更改评论附近会使变通方法类过时的内容吗?
Mil*_*ran 12
为什么不使用
bind(Logic.class).toInstance(LogicCreator.create(dep));
//ohh we missing dep
Run Code Online (Sandbox Code Playgroud)
然后我们可以做到这一点
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后
bind(Logic.class).toProvider(LogicProvider.class).asEagerSingleton();
Run Code Online (Sandbox Code Playgroud)
你甚至可以通过SomeDep dep你的提供者Provider<SomeDep>,然后调用providerDep.get()中LogicCreator.create(),这将是更稳健一点.
| 归档时间: |
|
| 查看次数: |
5350 次 |
| 最近记录: |