6

我正在编写一个自定义插件并对其进行测试,我想注入模拟实现。它不仅用于测试,而且从 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以及将其注入任务或其他任何地方的机制,如一些自定义类。

4

1 回答 1

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

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

不幸的是,该文档(连同完整的文件夹)已于2017 年 9 月 20 日被删除,并带有以下消息:

这已经变成了思想的坟墓。在这一点上,它只会使人们感到困惑。我们发现它更有效率

  • 使用 GitHub Epics 和问题解决较小的设计问题
  • 将 Google Docs 用于更大的主题(例如本地发布)

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

许多文档都是关于我们从未最终实现的功能。保留这些文件可能会使我们陷入某种思考问题的方式。相反,当我们真正想要开始研究它时,我们应该重新审视它。

于 2017-04-20T11:06:04.130 回答