Невозможно получить простой Dagger2 IoC, работающий с groovy / gradle, чего мне здесь не хватает - PullRequest
0 голосов
/ 03 сентября 2018

Я создаю новый gradle-проект в intellij и добавляю зависимости dagger2 и плагин, подобный этому

build.gradle плагины { id 'groovy' id 'java' id "net.ltgt.apt" версия "0.18" // для dagger2 ioc }

group 'com.softwood'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.5.2'
    testCompile group: 'junit', name: 'junit', version: '4.12'

    // compile time time IoC https://mvnrepository.com/artifact/com.google.dagger/dagger
    compile group: 'com.google.dagger', name: 'dagger', version: '2.17'
    apt 'com.google.dagger:dagger-compiler:2.17'
}

Я создаю интерфейс под названием «Впрыскиваемый», например,

import dagger.Component

@Singleton @Component (modules=[InjectableModule])
interface  Injectable {
    String toString ()
}

Я создаю модуль для создания экземпляров типа интерфейса, например,

import dagger.Module
import dagger.Provides

import javax.inject.Singleton

@Module
class InjectableModule {

    @Provides @Singleton Injectable provideInjectable () {
    new InjectableClass()
    }
}

Я определяю класс реализации, который расширяет публичный интерфейс, вот так

class InjectableClass implements Injectable {
    String toString () {
        "injected implementation $this"
    }
}

Я определяю зависимый класс, который ожидает импл через внедрение зависимостей, вот так

import javax.inject.Inject

class MyInjected {

    Injectable impl

    //constructor injection expected
    @Inject
    MyInjected (Injectable inj) {
        impl = inj
    }

    String toString () {
        "MyInjected ($impl)"
    }
}

последний и на данный момент означает, что у меня есть приложение с main (args), которое не может разрешить DaggerApplication_injectable, и если я удаляю его и запускаю пример, экземпляр MyInjected получает нулевое введенное значение

что я тут не так делаю -

...