新品価格 |
AndroidにDagger2を入れた簡単なサンプル
の続編
適当にコードコメントアウトして遊んでたら
面白い動きしたのでメモ
・Builder
前回のbuilderでmoduleをセットするところを
試しにコメントアウトしてみたが問題なく動いた
1 2 3 4 |
val appComponent = DaggerAppComponent.builder() // .modelModule(ModelModule()) .build() appComponent.inject(this) |
・作成されるComponent
なんでだろうと思って調べたら
Moduleにコンストラクがない以下の場合
1 |
class ModelModule |
Componentのbuilderは以下になる
1 2 3 4 5 6 |
public AppComponent build() { if (modelModule == null) { this.modelModule = new ModelModule(); } return new DaggerAppComponent(this); } |
・Moduleを変更
試しに以下のようにコンストラクタでデータ受け取るようにした
この状態でModuleセットしないとエラーになる
1 |
class ModelModule(val count:Int) |
・作成されるComponent
理由はbuilderが以下のように作られるから
1 2 3 4 5 6 |
public AppComponent build() { if (modelModule == null) { throw new IllegalStateException(ModelModule.class.getCanonicalName() + " must be set"); } return new DaggerAppComponent(this); } |
この辺の挙動面白いですね。
Daggerはなかなか勉強しがいがありそうです
続くよ