我有一个接口A,一个B类实现A。
然而,B的构造函数看起来像:
public class B (C c){}
其中C是第三方库类,只能在引导程序之后创建。 我希望B成为一个单身人士。
我发现在Guice中很难实现这一点。我知道我可以使用辅助注射器来做到这一点:
public class B (@Assisted C c){}
public AFactory {
public A createA(C c);
}
但看起来辅助注射器canot产生一个单例实例。
任何想法如何实现这个?
感谢。
答案 0 :(得分:5)
正如您所发现的,您不能使用辅助注射来创建单身人士。辅助注入适用于需要编程参数的实例,而单例则不是以编程方式创建的。
单身人士懒惰地构建,除非您在模块中的绑定上调用asEagerSingleton()
。所以你可以简单地将C注入到B中,并且在创建guice注入器之后将创建C的实例。如果更多地涉及C的创建,请创建C的提供者并将其绑定在您的模块中。
答案 1 :(得分:1)
在Module
中,您可以创建C
的实例并将其添加到上下文中。然后你可以正常注释类B
。
@Singleton
public class B...
答案 2 :(得分:1)
我认为你不需要辅助注射。
您是否考虑过实施(和绑定)Provider<C>
?然后C
可以注入B
(并且需要C
的任何地方)。