Android: 公式でAssisted Injectがサポートされそう
Created at Wed, Dec 30, 2020Assisted Injectのコードが公式のDaggerに入ったそうです。
https://twitter.com/JakeWharton/status/1344055984575160321
まだリリースされていないんですが、軽く試してみました。
サンプルコード
初期値を受け取りたい Counter
クラスがあるとして、それをAssistedを使って定義してみます。
class Counter @AssistedInject constructor(
@Assisted private val initialValue: Int
) {
val count = MutableStateFlow(initialValue)
}
@AssistedFactory
interface CounterFactory {
fun create(initialValue: Int): Counter
}
これで定義は完了です。FactoryクラスをAssistedFactory
アノテーションで、本体をAssistedInject
とAssisted
アノテーションを使って定義します。
square/AssistedInject とは違い AssistedModule
が必要なくなりました。
そして次のように使います。
@Inject lateinit var factory: CounterFactory
val counter = factory.create(100)
...
定義した CounterFactory
をinjectして、 Counter
インスタンスを生成しています。こちらはいつものDaggerの記法になります。
まとめ
ついに公式にAssisted Injectionが入ります:D
サンプルコードは satoshun/daggersampleにあります。