class SlideshowViewModel : ViewModel() {
@Inject lateinit var mediaItemRepository : MediaItemRepository
fun init() {
What goes here?
}
Поэтому я пытаюсь изучить Dagger2, чтобы сделать свои приложения более тестируемыми. Проблема в том, что я уже интегрировал Kotlin и работаю над архитектурными компонентами Android. Я понимаю, что внедрение конструктора предпочтительнее, но с ViewModel
это невозможно. Вместо этого я могу использовать lateinit
для инъекции, но я не понимаю, как вводить.
Мне нужно создать Component
для SlideshowViewModel
, а затем ввести его? Или я использую компонент Application
?
gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
kapt {
generateStubs = true
}
dependencies {
compile "com.google.dagger:dagger:2.8"
annotationProcessor "com.google.dagger:dagger-compiler:2.8"
provided 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
}
Компонент приложения
@ApplicationScope
@Component (modules = PersistenceModule.class)
public interface ApplicationComponent {
void injectBaseApplication(BaseApplication baseApplication);
}
BaseApplication
private static ApplicationComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerApplicationComponent
.builder()
.contextModule(new ContextModule(this))
.build();
component.injectBaseApplication(this);
}
public static ApplicationComponent getComponent() {
return component;
}
apply plugin: 'kotlin-kapt'
в своемbuild.gradle
файле. Кроме того, вы должны использоватьkapt
вместоannotationProcessor
. - person Benjamin   schedule 21.02.2018