私はKotlin言語でClean Architectureと依存関係注入を学ぶためにDagger 2をテストアプリケーションに実装しようとしています。Dagger2とKotlinが失敗しました原因:app:compileDebugKotlinAfterJava
EDIT :
I can compile thanks to @Logain, but I have always the static member problem with Dagger in my singleton (see below my TaskWorker), so I'm looking for how can I fix this error
しかし、私は問題を抱えて、私はは私がテストのために私のアプリを実行する場合、それは失敗し、消えを再構築しますが、していないとき、私のDaggerComponentがよく生成されます。それは、このエラーで失敗します。私は再構築を行うときながら
Error:(21, 29) Unresolved reference: DaggerInjectorComponent
Error:Execution failed for task ':app:compileDebugKotlinAfterJava'.
> Compilation error. See log for more details
、このタスクは、それが失敗した理由を私は理解していない正しく
:app:compileDebugKotlinAfterJava
渡されます。
@Singleton
@Component(modules = arrayOf(ContextDaggerModule::class, LocalStoreDaggerModule::class))
interface InjectorComponent {
fun inject(realmLocalStore: RealmLocalStore)
fun inject(taskWorker: TaskWorker)
}
ContectDaggerModule:
@Module
class ContextDaggerModule (val app: Application) {
@Provides
@Singleton
fun provideContext(): Context = app
@Provides
@Singleton
fun provideApplication(): Application = app
@Provides
@Singleton
fun provideResources(): Resources = app.resources
}
LocalStoreDaggerModule:
@Module
class LocalStoreDaggerModule {
@Provides
@Singleton
fun provideLocalStore(context: Context): LocalStore {
return RealmLocalStore(context)
}
}
ここ
は私のInjectorComponentです
私はObject-declarationsに依存関係を注入するために問題が発生したと思うが、すべての要素は静的であり、Daggerはそれを感謝しない。 だから、私は単純なオーバーライドゲッターとデータを注入するが、nopをハックしようとしている。
object TaskWorker {
// @Inject lateinit var localStore: LocalStore
// Not work cause it's a static variable
var localStore: LocalStore? = null
@Inject
get() = localStore
// some cool function
}
が、私はこれらの依存関係を使用します:
// Dagger2
compile 'com.google.dagger:dagger:2.11'
kapt 'com.google.dagger:dagger-compiler:2.11'
provided 'org.glassfish:javax.annotation:10.0-b28'
'localStore'に' @ JvmField'を付けてみてください。それが動作しない場合は、 'gradlew build --debug --stacktrace'を実行してスタックトレースを貼り付けてください。 – Mibac
@Mibac私の' localStore'にカスタムゲッターがあるので、この注釈を適用できません。 – MrLeblond
別の変数を作成してください@ JvmField'アノテーションと '@ Inject'アノテーション)、またはカスタムゲッターを削除して、ゲッターが問題になっているかどうかをテストします。 もし '--debug --stacktrace'引数でgradleを実行してください。私たちは例外が何であるかを確認することができます – Mibac