我认为你必须使用assisted inject扩展吉斯的。
基本上,你定义ClassTest
,因为它是,但标记“变”依赖关系@Assisted
:
@Inject
public ClassTest(ITestInterface testInterface, @Assisted Class<?> clazz){
...
}
然后创建为ClassTest
对象将接受Class
参数和返回ClassTest
个工厂接口:
public interface ClassTestFactory {
ClassTest create(Class<?> clazz);
}
然后安装特殊的模块这会为您创建工厂:
// Inside your module
install(new FactoryModuleBuilder().build(ClassTestFactory.class));
那么无论你需要ClassTest
情况下,您应该注入ClassTestFactory
接口,而不是:
@Inject
YourLogicClass(ClassTestFactory ctFactory) {
this.ctFactory = ctFactory;
}
最后你用它来为你想要的每类对象创建ClassTest
S:
ClassTest ct1 = ctFactory.create(SomeClass.class);
ClassTest ct2 = ctFactory.create(AnotherClass.class);
但如果我是你,我真的会重新考虑整个班级架构,以避免这种需求。
你应该永远不会写这样的提供者!它无视了DI概念的全部原因,实际上它是Guice试图去除的东西。 – 2013-05-08 11:39:28
好吧......你说得对(但它仍然有可能)。 +1给你的答案,这真的很好,我不知道这样的解决方案。我想我可以利用我遇到的几个问题 – macias 2013-05-08 13:57:02