class SlideshowViewModel : ViewModel() {
@Inject lateinit var mediaItemRepository : MediaItemRepository
fun init() {
What goes here?
}
私はDagger2を学習しようとしていますので、アプリケーションをよりテスト可能にすることができます。問題は、私はすでにKotlinを統合していて、AndroidのArchitecturalコンポーネントに取り組んでいます。私はコンストラクタの注入が望ましいことを理解していますが、これはViewModel
では不可能です。代わりに、私はlateinit
を注射するために使用することができますが、私は注射する方法を理解することができません。Daggerを使用してViewModelを注入する2 + Kotlin + ViewModel
SlideshowViewModel
のComponent
を作成して注入する必要がありますか?または、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;
}
「だから私はダガー2を学ぼうとしているので、アプリをもっとテスト可能にすることができます。 Dagger 2はテスト容易性に影響を与えないか、またはその効果が過小であると言います。 それが唯一の理由なら、それを渡すことができます。 *多くのチュートリアルを公開したDaggerのユーザーと話す – Vasiliy
あなたの質問に答えられませんが、 'build.gradle'ファイルに' apply klugin:kotlin-kapt''を忘れました。また、 'annotationProcessor'の代わりに' kapt'を使うべきです。 – Benjamin