如何在不访问类impl代码的情况下强制注入特定实例?

时间:2018-10-06 08:18:53

标签: dependency-injection guice

我正在尝试从第三方软件包中绑定类C。 它通过构造函数注入一个Foo类实例。

class C {
    public C(@Inject Foo foo) {
        ...
    }
    ...
}

在我的应用程序中,我绑定了两个Foo实例-

bind(Foo.class)
    .to(FooImpl1.class);

bind(Foo.class)
    .annotatedWith(Names.named("SpecialFoo"))
    .to(FooImpl2.class);

当绑定C时,我希望使用Named Foo实例。但是,我无法访问定义C的代码,因此无法添加任何注释。

除了编写自己的C语言提供程序方法以外,是否有建议的方法?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用PrivateModule。在您的示例中,它将类似于:

public class CModule extends PrivateModule {
    protected void configure() {
        bind(Foo.class).to(FooImpl2.class);
        bind(C.class);
        expose(C.class);
    }
}