繁体   English   中英

具有循环依赖的HK2注射

[英]HK2 Injection With Circular Dependency

我正在使用HK2作为依赖项注入框架。 我正在我的应用程序中实例化一个状态机。 因此,A <-> B是很有可能的,因为取决于输入,一个人可以从B过渡回A。

@Singleton 
class StateManager extends SomeInterface{

    @Inject
    private B b;

    @Inject
    private A a;
}

@Singleton 
class A extends State{

    @Inject
    private B b;

    @Inject
    private StateManager sm;

}

@Singleton 
class B extends State{

    @Inject
    private A a;

    @Inject
    private StateManager sm;
}

我怎样才能实现这样的目标? 以上示例仅用于说明。 我的州比这更多。 我试图查看它是否重复,但是找不到可以处理的重复项。 当我尝试使用ServiceLocator.getService(StateManager.class)获取此图时,出现循环依赖异常。 做这样的事情有什么好处?

您应该能够注入javax.inject.Provider<B> 从Javadoc

提供T实例。 通常由喷射器实现。 对于任何可以注入的T类型,还可以注入Provider<T> 与直接注入T相比,注入Provider<T>使:

  • 检索多个实例。
  • 实例的惰性或可选检索。
  • 打破循环依赖。
  • 抽象作用域,以便您可以从包含作用域的实例中查找范围较小的实例。

然后在需要时调用get()

B b = bProvider.get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM