Я создаю новый 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 получает нулевое введенное значение
что я тут не так делаю -