我正在编写一个自定义插件并对其进行测试,我想注入模拟实现。它不仅用于测试,而且从API角度来看,我想根据上下文注入不同的实现。我目前正在使用Gradle 2.6,并且我了解它支持某种形式的依赖注入。我不想使用Spring / Guice / HK2,因为Gradle本身支持它。但是,我找不到如何使用Gradle 2.6 API注入依赖项的任何信息。
例如:
class CustomTask extends DefaultTask {
private SomeInterface interface
@Inject
CustomTask(SomeInterface interface) {}
@TaskAction
public void executeTask() {
interface.executeSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
因此,从本质上讲,我想弄清楚在何处定义不同实例的绑定,SomeInterface以及将其注入任务或其他任何自定义类的机制。
我使用 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;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这样的目标?上面的例子只是为了说明。我有比这更多的州。我试图看看它是否是重复的,但找不到一个可以处理的。当我尝试ServiceLocator.getService(StateManager.class)获取此图时,出现循环依赖异常。做这样的事情有什么好处呢?