Guice:使用带有自己参数的构造函数注入 class?

Guice: Inject class with constructor with own parameters?

我对 Guice 有疑问。我想用一个例子来说明这一点。我想始终动态传递此构造函数的参数,例如新测试(“鲍勃”,765);。我还希望 Guice 注入一些字段(比如这里的 SomeOtherObject)。我怎样才能做到这一点?提前致谢!

public class Test {

private String name;
private int id;

//Needs to be injected by Guice
@Inject
SomeOtherObject object;

public Test(String name, int id) {
    this.name = name;
    this.id = id;
}

}

Guice 的 AssistedInject 功能是处理此问题的好方法。

基本上,您定义一个工厂来获取 Test 个对象:

public interface TestFactory {
    public Test create(String name, int id);
}

使用 @Assisted 注释扩充 Test class 的 @Inject 构造函数:

public class Test {
    @Inject
    public Test(SomeOtherObject object, @Assisted String name, @Assisted int id) {
        this.object = object;
        this.name = name;
        this.id = id;
    }
}

然后在模块的配置中使用 FactoryModuleBuilder

install(new FactoryModuleBuilder().build(TestFactory.class));

而不是直接构造 Tests,而是注入一个 TestFactory 并使用它来创建 Tests:

public class OtherThing {
    @Inject
    TestFactory factory;

    public Test doStuff(Stirng name, int id) {
        return factory.create(name, id);
    }
}

注意:现在查看文档,似乎 AutoFactory 已被引入作为执行此操作的首选方法,并且可能更简单。