0

假设我的类路径中的 jar 中有一个 A 类(即,我无法控制它的来源,因此不能简单地用 注释它@Inject)。A 具有以下构造函数定义:

A(B b, C c) {
    this.b = b;
    this.c = c;
}

在我的代码库中,我有类:

BImpl implements B

CImpl implements C

我的问题是:如何配置 Guice 来管理要注入 BImpl 和 CImpl 的 A 实例(如果它甚至在框架范围内)?

4

1 回答 1

1

当您说“jar 文件中的类 A”时,我假设您无法控制该类的源 - 您不能简单地添加@Inject到构造函数中。

如果是这种情况,那么您可以Module这样定义:

class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(B.class).to(BImpl.class);
        bind(C.class).to(CImpl.class);

        try {
            bind(A.class).toConstructor(A.class.getConstructor(B.class, C.class));
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}

前两个绑定是标准的——您将接口类型绑定到实现类型。

最后一个绑定使用toConstructor(从 Guice 3.0 开始),它允许您更轻松地“粘合”外部组件 - 就像您的情况一样。

于 2012-07-24T08:35:24.653 回答