基于范围

时间:2016-04-15 01:24:00

标签: java dependency-injection guice

在我的场景中,我有BaseObject这是一个界面,然后是BaseObjectImpl

然后我有两个客户端ClientAClientB,它们都引用BaseObjectImpl,其次要的不同之处在于BaseObjectImpl的构造函数参数应该根据哪个客户端而变化使用它。设置如下:

BaseObject

public interface BaseObject {
  void doAction();
}

BaseObjectImpl:

public class BaseObjectImpl implements BaseObject {
    @Inject
    public BaseObjectImpl(RandomInjectedObject random, String inputString) {
        this.inputString = inputString;
    }

    public void doAction() {
        // print input string
    }

现在为客户:

客户端A:

public class ClientA {

    @Inject
    public ClientA(BaseObject baseObject) {
        this.baseObject = baseObject;
    }

ClientB:

public class ClientB {

    @Inject
    public ClientB(BaseObject baseObject) {
        this.baseObject = baseObject;
    }

现在的问题是,当我在ClientAModule内时,我希望提供inputString参数,使其设置为clientAString,而ClientBModule设置为clientBString我想提供{ {1}}而是。

这样做的最佳方法是什么?请注意,BaseObjectImpl接受两个参数(另一个参数对两个客户端具有相同的定义)。

我尝试做的是在我定义的BaseObjectModule类中,我在其中创建了一个Builder,我可以设置一个特定的注释并设置一个特定的inputString。然后在我的Client<AB>Module内,我在每个BindingAnnotation中创建了一个不同的BaseObjectModule。然后,当我安装BindingAnnotation时,我使用构建器并且每个都传递了特定的inputStringBindingAnnotation

然后我尝试将inputString / Provider范围绑定到BaseObjectBaseObjectImpl是我尝试使用相应的inputString实例化RandomInjectedObject {1}}以及我在BaseObjectModule中提供的注入This Provider cannot be used until the Injector has been created。我收到一个错误说: AssistedInjection因为我还没有在模块内部创建注入器。

我正在查看inputString以便我可以这样做,所以我此时只是通过了UILabel,但问题是我仍然需要注射器。

0 个答案:

没有答案