问题是您没有此类型的绑定。仅仅因为您显式地播种了值并不意味着您不必绑定它。你可以说:
bind(String.class) .annotatedWith(Names.named("name")) .toProvider(Providers.<String>of(null));
然后,如果
name变量具有值
"foo",则将被
"foo"注入,因为您正在播种它。播入值会将其放入作用域(这只是一个缓存),以使Guice不会运行该值的提供程序。通过使用null的提供程序,您可以让该值在没有种子的情况下爆炸。
简而言之,Guice要求您指定一种配置每个依赖项的方法,而不管是否计划手动为范围设定种子(顺便说一句,这是非常罕见的事情)。
一些不请自来的建议:-请避免注入注射器。这使得解决这类问题变得更加困难。最好只有一个“根对象”。这是您需要调用
injector.getInstance以创建的单个对象。对于许多应用程序,这可以只是您的应用程序服务器。(例如-
injector.getInstance(MyServer.class).startServer())。为什么这对您有帮助?它使启动时更容易检测到所有依赖关系都得到满足。如果在请求期间注入注入器并可以调用它来创建任意对象,则可能会在运行时晚些时候由于缺少绑定而招致某些配置错误的风险。同样,如果您尽早进行了所有getInstance调用,则编写为您执行此 *** 作的测试会更容易,这样您就可以简单地运行测试以了解您的Guice绑定是否满意。
更新:
如果我将相同的变量绑定到全局作用域,它将起作用。
嗯,你基本上做了我做的事吗?如果是这样,我在上面的解释解释了为什么它有效:-)。
如果我删除了注释,它将起作用。
之所以起作用,是因为Guice确实有一个绑定,
String因为它
String有一个空的构造函数:-)。基本上,您必须具有单个
@Injectable构造函数,no-
arg构造函数或提供程序以绑定类型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)