如何以Gradle推荐的方式在Gradle Plugin中注入依赖项?

时间:2015-09-11 19:27:15

标签: gradle dependency-injection gradle-plugin

我正在编写一个自定义插件并测试它,我想注入模拟实现。它不仅仅用于测试,而且从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()
       }
 }

因此,基本上,我想知道在哪里定义SomeInterface的不同实例的绑定以及将其注入任务或其他任何地方(如某些自定义类)的机制。

1 个答案:

答案 0 :(得分:4)

由于这个问题没有结束,一些信息对于遇到它的人来说可能仍然有用。

  

我不想使用Spring / Guice / HK2,因为Gradle本身支持它。

您可能已经在gradle论坛上看到了相关的讨论 https://discuss.gradle.org/t/dependency-injection-in-gradle-plugins/6538

  

我们目前正致力于此。内部Gradle服务已经可以使用依赖注入,但我猜你想要注入自己的协作者。我们的依赖注入将在某些时候支持这一点。

通常使用Gradle,我们可以检查烤箱中的任何东西 https://github.com/gradle/gradle/tree/bd4fb1c396a695d55aeba9bc37e164a488c0b882/design-docs

本设计文档可以让您了解核心维护者之一的想法是解决问题的好方法。虽然它不完整,但我认为它很有价值。

不幸的是,文档(连同完整文件夹)已被删除on Sep 20, 2017,并显示以下消息:

  

这已成为思想的坟墓。它只会让人感到困惑   人们在这一点上。我们发现它的效率更高

     
      
  • 使用GitHub Epics和较小设计问题的问题
  •   
  • 将Google文档用于更大的主题(例如原生出版)
  •   
     

一旦实现功能,这些文档很快就会过时。   它们不能替代良好的用户和代码文档。

     

许多文档都是关于我们从未结束的功能   实现。让这些文件仍然存在可能会锁定我们   某种思考问题的方式。相反,我们应该有一个   当我们真正想要开始研究它时,请重新审视它。