将Koin迁移至Hilt时如何实现类似Koin的带参数字段注入
Hilt实现带动态参数的字段注入方案
Hilt中对应Koin parametersOf 动态传参注入的功能,是通过*@AssistedInject 辅助注入*实现的,具体步骤如下:
- 第一步:给需要接收动态参数的类添加
@AssistedInject构造注解,动态入参用@Assisted标记class Socket @AssistedInject constructor( // Hilt自动注入的普通依赖 private val okHttpClient: OkHttpClient, // 外部动态传入的参数,加@Assisted注解 @Assisted private val roomId: String ) { // 类内部逻辑 } - 第二步:定义
@AssistedFactory注解的工厂接口,Hilt会自动生成该接口的实现类@AssistedFactory interface SocketFactory { // 方法参数和构造中@Assisted标记的参数一一对应 fun create(roomId: String): Socket } - 第三步:在使用侧先注入工厂实例,再调用工厂方法传入动态参数获取目标实例
@Inject lateinit var socketFactory: SocketFactory // 传入动态参数roomId创建Socket实例,和Koin的by inject { parametersOf(roomId) }效果一致 private val socket: Socket by lazy { socketFactory.create(roomId) }
注意:如果有多个动态参数,只需要在构造中给所有动态参数都加
@Assisted,同时在工厂的create方法中添加对应参数即可,参数类型和名称需要对应匹配。
补充:如果使用的是2.31及更早版本的Hilt,需要额外引入dagger-hilt-androidx-assisted依赖,更高版本已内置辅助注入功能,无需额外引入。
内容的提问来源于stack exchange,提问作者Mohit Suthar
相关产品推荐
相关产品推荐

