我对 Guice 还很陌生,所以希望这不是一个明显的问题......
我正在处理一个使用反射动态实例化我的一个应用程序类(让我们称之为C)的框架,所以我无法控制它的实例化。C此外,在框架实例化它之后,我没有简单的方法来访问新创建的。如下C所示:
公共类 C 实现 I {
公共 C() {
// 这个 ctor 是由框架调用的,所以不能在这里使用 DI?
}
公共无效初始化(){
// 这是一个后实例化钩子,f/w 将调用它
}
私人无效 m() {
依赖 d = Dependency.getInstance();
d.doSmth();
}
}
我想使用 DIC获取。Dependency这Dependency显然是一个单例,但通常情况并非如此。
我想出了两种可能的解决方案,感觉都不是很整洁,所以我想我会问专家:
静态注入。我很难看到这如何在服务定位器反模式上得到显着改进 - 我最终得到了可以在外部操纵的非最终静态字段......嗯。
该框架支持一个钩子,用于
C在实例化后初始化自身(initialize()如上所示的方法)。此方法可以使用 setter 注入自注入新创建的实例。
对于 2,我想这意味着更多的外部可更改性,但至少对于单元测试之类的事情更明确地暴露了依赖关系。问题是:在这种情况下,我如何获得 Guice Injector(不依赖另一个服务定位器)?我也读过(并且倾向于同意)在整个应用程序代码中明确引用 Injector 是可疑的做法。
您的洞察力将不胜感激。
非常感谢,
克里斯蒂安