【发布时间】:2014-03-04 03:16:04
【问题描述】:
我正在使用 Guice Assisted Inject 库为我建立一个工厂。我目前的设置是这样的:
class MyObject {
@Inject public MyObject(@Assisted FirstDep first, @Assisted SecondDep second, ThirdDep third) { /**/ }
}
class FirstDep { /* nothing to see here */ }
class SecondDep {
@Inject public SecondDep(@Assisted FirstDep first) { /**/ }
}
class ThirdDep { /* nothing to see here either */ }
class MyModule extends AbstractModule {
@Override public void configure() {
bind(ThirdDep.class);
install(new FactoryModuleBuilder().build(MyObjectFactory.class));
}
}
interface MyObjectFactory {
SecondDep createSecond(@Assisted FirstDep first);
MyObject createMyObject(@Assisted FirstDep first, @Assisted SecondDep second);
}
这迫使我使用factory.createController(first, factory.createSecond(first)) 显式创建SecondDep。是否可以更改我的绑定,以便我可以简单地执行factory.createController(first),它会自动使用SecondDep 绑定和我传入的参数?
【问题讨论】:
-
我已经尝试使用方法
MyObject createMyObject(@Assisted FirstDep first)使 MyFactory 成为一个抽象类,该方法包装了两个生成的方法,但这不起作用。 Guice 要求工厂类型是接口。
标签: java guice assisted-inject