読者です 読者をやめる 読者になる 読者になる

【たすけて】Dagger2の導入でつまづく【ハマった】

Dagger2を自作のAndroidアプリに導入する中で躓いたことをまとめようと思います。現在進行形でハマっているのでこれからも加筆修正が入る予定……

前提条件

  • Kotlin
  • Android Studio2.2

✓ハマりその1 そもそもaptが動かなくて困る

アノテーションプロセッシングがうまく動かなかったみたいだったのですが、今回はKotlinを使っているのが原因だったようです。結果的にkaptを利用することにより解決できました。

✓ハマりその2 Activity内でInjectしてもうまく注入されない

これはまだ未解決で結構激しくハマっているのですが、ComponentやModule等を定義した状態で、依存性を注入したいlateinit varで定義したフィールドに@Injectアノテーションを付けActivityのonCreate内でInjectメソッドを呼んでも正しく依存性が注入されていない結果、そのフィールドを参照したときに例外が発生してクラッシュするという問題にぶち当たっています。 とりあえず目下これをなんとかしたいと思っているのですが、なんとかなったらここに追記しようかと……

追記

これは僕の根本的な勘違いが原因だったようです。 正しい理解としては以下の様なものになると思います(@yuyakaidoさんありがとうございます!)

  • Component内のInjectメソッドは依存性を注入する対象を指定する
  • ModuleはComponent内のInjectメソッドで必要とされるものに対して(注入する中身)providerを定義する

ここらへんの理解が曖昧だったため上記のActivityを引数に取るメソッドを用意しなかった結果コケてしまったみたいでした。