如何使用Google Guice将一个实现绑定到几个接口?

2022-09-01 06:35:36

我需要绑定一个类作为两个接口的实现。它应该绑定在单例范围内。

我做了什么:

bind(FirstSettings.class).
    to(DefaultSettings.class).
    in(Singleton.class);
bind(SecondSettings.class).
    to(DefaultSettings.class).
    in(Singleton.class);

但是,显然,它会导致创建两个不同的实例,因为它们绑定到不同的键。

我的问题是我该怎么做?


答案 1

Guice的wiki上有一个关于这个用例的文档

基本上,这是你应该做的:

// Declare that the provider of DefaultSettings is a singleton
bind(DefaultSettings.class).in(Singleton.class);

// Bind the providers of the interfaces FirstSettings and SecondSettings
// to the provider of DefaultSettings (which is a singleton as defined above)
bind(FirstSettings.class).to(DefaultSettings.class);
bind(SecondSettings.class).to(DefaultSettings.class);

无需指定任何额外的类:只需从s的角度思考,答案就会自然而然地出现。Provider


答案 2

我发现的解决方案是:

bind(FirstSettings.class).
    to(DefaultSettings.class).
    in(Singleton.class);
bind(SecondSettings.class).
    to(FirstSettings.class).
    in(Singleton.class);

它适用于我的情况,因为SecondSettings扩展了FirstSettings。


推荐