绑定@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() ,这将更加健壮。