如何配置 Guice 以要求对整个应用程序进行显式绑定(对于所有模块)
How to configure Guice to require explicit bindings for the whole application (for all modules)
为了在 Guice 中使用 "explicit" 绑定,我可以在我的模块实现中调用 binder().requireExplicitBindings()
,例如
public class MyExampleModule extends AbstractModule {
@Override
protected void configure() {
super.configure();
binder().requireExplicitBindings();
...
}
}
关于 Guice API,它看起来像我需要在 所有 我的应用程序模块实现中那样做。
没有办法在一个地方为整个应用程序配置这个吗?
我正在使用 Guice 4。2.x
像 requireExplicitBindings()
这样的活页夹配置选项对于使用 Binder
的任何地方都是全局的。因此,除非您使用 Guice SPI 做一些不寻常的事情,否则它适用于构成相同 Injector
.
一部分的所有绑定
最佳做法是每个应用程序只有一个 Injector
,因此 Binder
选项实际上已经是全局的。
就其价值而言,我认为 requireExplicitBindings()
有点矫枉过正。 requireAtInjectOnConstructors()
之类的东西解决了隐式绑定最令人震惊的问题,同时仍然允许基于带注释的构造函数的 JSR-330 依赖注入,这是一个非常方便的功能。
为了在 Guice 中使用 "explicit" 绑定,我可以在我的模块实现中调用 binder().requireExplicitBindings()
,例如
public class MyExampleModule extends AbstractModule {
@Override
protected void configure() {
super.configure();
binder().requireExplicitBindings();
...
}
}
关于 Guice API,它看起来像我需要在 所有 我的应用程序模块实现中那样做。
没有办法在一个地方为整个应用程序配置这个吗?
我正在使用 Guice 4。2.x
像 requireExplicitBindings()
这样的活页夹配置选项对于使用 Binder
的任何地方都是全局的。因此,除非您使用 Guice SPI 做一些不寻常的事情,否则它适用于构成相同 Injector
.
最佳做法是每个应用程序只有一个 Injector
,因此 Binder
选项实际上已经是全局的。
就其价值而言,我认为 requireExplicitBindings()
有点矫枉过正。 requireAtInjectOnConstructors()
之类的东西解决了隐式绑定最令人震惊的问题,同时仍然允许基于带注释的构造函数的 JSR-330 依赖注入,这是一个非常方便的功能。