绑定@Provides方法作为渴望的单例
我想使用@Provides
注释的方法将绑定@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; } }
我可以更改评论附近的某些内容,使解决方法类过时吗?
为什么不使用
bind(Logic.class).toInstance(LogicCreator.create(dep)); //ohh we missing dep
然后我们可以做到这一点
class LogicProvider implements Provider { 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
传递给您的提供Provider
,然后在LogicCreator.create()
中调用providerDep.get()
,这将更加健壮。