Guice协助注射单一范围

时间:2011-10-18 13:03:41

标签: java dependency-injection guice

我有一个接口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产生一个单例实例。

任何想法如何实现这个?

感谢。

3 个答案:

答案 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的任何地方)。