2015-09-11 4 views
4

Я пишу пользовательский плагин и проверяю его, я хочу вводить ложные реализации. Это не только для тестирования, но и с точки зрения API, я хочу внедрить различные реализации в зависимости от контекста. В настоящее время я использую Gradle 2.6, и я понимаю, что он поддерживает некоторую форму Injection Dependency. Я не хочу использовать Spring/Guice/HK2, поскольку сам Gradle поддерживает его. Однако я не могу найти какую-либо информацию о том, как вводить зависимости с помощью API-интерфейсов Gradle 2.6.Как применять зависимости в Gradle Plugin в Gradle?

Для например:

class CustomTask extends DefaultTask { 

     private SomeInterface interface 

     @Inject 
     CustomTask(SomeInterface interface) {} 

     @TaskAction 
     public void executeTask() { 
      interface.executeSomething() 
     } 
} 

Так, по существу, я хочу, чтобы выяснить, где для определения привязок для различных экземпляров SomeInterface и механизм, чтобы послать его в задачу или где-нибудь еще, как некоторые пользовательские классы.

ответ

2

Поскольку этот вопрос не был закрыт, некоторая информация может по-прежнему быть полезной для тех, кто сталкивается с этим.

Я не хочу использовать Spring/Guice/HK2, так как сам 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 былины и вопросы для небольших вопросов дизайна
  • использовать Google Docs для больших тем (например, родную публикация)

Этих документов быстро устаревают как только функция реализована. Они не заменяют хорошую документацию пользователя и кода.

Многие из документов касаются особенностей, которые мы так и не закончили . Наличие этих документов по-прежнему может привести нас к определенному способу мышления о проблеме. Вместо этого мы должны иметь свежий взгляд на него, когда мы действительно хотим начать работать над ним.

Смежные вопросы