我对 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 是可疑的做法。
您的洞察力将不胜感激。
非常感谢,
克里斯蒂安