Master of Dagger
https://booth.pximg.net/dac5443b-c661-4e74-84dd-b914e12fb633/i/1577764/d9d537ca-896d-4a6d-87a2-7461adff9e89_base_resized.jpg
第I部 Dagger の基礎
第1章 Dependency Injection
Dependency Injection ってなんやねん
2つのオブジェクトが登場する
使用される側 = a dependency = a service
使用されるオブジェクトを使う側 = a dependent object = a client
Dependency (service) を dependent object (client) に渡す を "injection" と呼ぶ
"依存するものを渡してあげる"こと
DI のパターン
以下のようなクラスがあったとして
code:kotlin
class Client {
private val service: Service
}
Constructor injection: Dependency を constructor を経由して渡してあげる
Setter injection: Dependency を setter method 経由で渡してあげる
Interface injection: Setter を interface で定義して client に実装させる
嬉しい: dependency の実装や生成方法がどんなのかを client が知る必要がない
つらい: 依存の依存の依存の... ってなったとき準備が大変
ライブラリで解決しよう
用語
DI framework: client のオブジェクト生成を担う
DI container: client を生成する役割を持ったオブジェクト
第2章 Dagger
用語
binding: 型とそのインスタンスの取得方法
dependency: binding が必要とする他の型のインスタンス
オブジェクトグラフ: binding に関する <type> to <factory that returns an instance of the type> の集合
Module: binding をグループ化したもの
Component: オブジェクトグラフを持ってて、特定の型のインスタンスを取得する役割を持つ
inject: 指定した binding 型の引数や property にオブジェクトグラフから取得したインスタンスを与える
これは「DIとは?」に当てはめると「オブジェクトグラフから service を取ってきて client に渡して client のインスタンスをつくる」みたいな感じ
第3章 Component
第4章 dependency
第5章 Module
第6章 MultiBindings
第7章 Subcomponents
第8章 Scope
第9章 コンパイルエラー逆引き
第II部 Android + Dagger
第10章 ViewModel を Dagger で生成する
第11章 ViewModel で Subcomponent が必要になる時
第12章 ViewModel で SavedStateHandle を使う
第13章 Android Support
https://www.youtube.com/watch?v=o-ins1nvbDg
Android Support はもう機能追加はしない
Dagger 本体でより使いやつくなるようにAPIを改善していくとのこと
Hilt