Java Guice辅助单例范围注入

Java Guice辅助单例范围注入,java,dependency-injection,guice,Java,Dependency Injection,Guice,我有一个接口A和一个类B实现A 但是,B的构造函数如下所示: public class B (C c){} 其中C是第三方库类,只能在引导后在上创建。 我想成为单身汉 我发现很难在Guice中实现这一点。我知道我可以使用辅助喷射器来完成这项工作: public class B (@Assisted C c){} public AFactory { public A createA(C c); } 但它似乎无法生成一个单例实例 你知道如何

我有一个接口A和一个类B实现A

但是,B的构造函数如下所示:

     public class B (C c){}
其中C是第三方库类,只能在引导后在上创建。 我想成为单身汉

我发现很难在Guice中实现这一点。我知道我可以使用辅助喷射器来完成这项工作:

    public class B (@Assisted C c){}

    public AFactory {
          public A createA(C c);
    }
但它似乎无法生成一个单例实例

你知道如何实现这一点吗


谢谢

模块中
可以创建
C
的实例并将其添加到上下文中。然后您可以正常地注释class
B

@Singleton
public class B...

我想你不需要辅助注射


您是否考虑过实现(并绑定)一个
提供程序
?然后
C
可以注入
B
(以及需要
C
的任何地方)。

正如您所发现的,您不能使用辅助注入来创建单例。辅助注入用于需要编程参数的实例,而单例不是以编程方式创建的


除非在模块中的绑定上调用
asagersingleton()
,否则单例是惰性构造的。因此,您可以简单地将C注入到B中,并在创建guice注入器之后创建C的实例。如果更需要创建C,请创建一个C提供程序并将其绑定到您的模块中。

谢谢您的回答。但是正如我所说的,在引导之前创建C是不可能的。它只是在应用程序运行时动态创建的,尽管C也是一个单例。我想这取决于你所说的引导。使用Guice,您可以在配置模块时以编程方式进行控制。因此,您可以通过编程方式等待bootstapping完成,然后配置处理类B和C的模块。为什么不在没有辅助的情况下以旧式编写工厂代码?使用Guice注入工厂,但手动实现createA。