😸
BindingAdapterでHiltのインスタンスを取得する
概要
DataBindingのBindingAdapterのメソッドから、
Hiltで管理しているインスタンスを取得する方法です。
取得方法
EntryPointを作成して、
BindingAdapterのメソッド上からEntryPointで取得するようにします。
metaCache, accountStoreには利用したいインスタンスのクラスを指定するようにします。
@EntryPoint
@InstallIn(SingletonComponent::class)
internal interface ReactionViewHelperProvider {
fun metaCache(): MetaCache
fun accountStore(): AccountStore
}
BindingAdapterから上記のEntryPointを取得して、EntryPoint経由で必要なインスタンスを取得します。
object ReactionBindingAdapter {
@JvmStatic
@BindingAdapter("avatarIcon", "url")
ImageView.setReactionIcon(reactionType: String) {
val entryPoint = EntryPointAccessors.fromApplication(context.applicationContext, ReactionViewHelperProvider::class.java)
val metaCache = entryPoint.metaCache()
val reaction = metaCache.get(reactionType)
}
}
まとめ
そもそも、BindingAdapter上でHiltのインスタンスが必要になるほどの処理を実行すること自体が間違っている可能性が高いですが、
EntryPontを使用することによって、Hilt上で管理しているインスタンスを取得することができます。
参考にしたリンク
Discussion