如何配置 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 依赖注入,这是一个非常方便的功能。