最近新项目想将dagger依赖注入框架,切换谷歌官方的Hilt依赖注入框架,没想到出师不利。
官方文档在kotlin示例代码@InstallIn(ActivityComponent.class)有个错误,本来也不是很熟悉kotlin,折腾了半天。
使用 Hilt 实现依赖项注入->
原文:
使用 @Binds 注入接口实例
以 AnalyticsService 为例。如果 AnalyticsService 是一个接口,则您无法通过构造函数注入它,而应向 Hilt 提供绑定信息,方法是在 Hilt 模块内创建一个带有 @Binds 注解的抽象函数。
@Binds 注解会告知 Hilt 在需要提供接口的实例时要使用哪种实现。
带有注解的函数会向 Hilt 提供以下信息:
函数返回类型会告知 Hilt 该函数提供哪个接口的实例。
函数参数会告知 Hilt 要提供哪种实现。
以下是官方提供的java和kotlin示例代码
@Module
@InstallIn(ActivityComponent.class)
public abstract class AnalyticsModule {
@Binds
public abstract AnalyticsService bindAnalyticsService(
AnalyticsServiceImpl analyticsServiceImpl
);
}
@Module
@InstallIn(ActivityComponent.class)
abstract class AnalyticsModule {
@Binds
abstract fun bindAnalyticsService(
analyticsServiceImpl: AnalyticsServiceImpl
): AnalyticsService
}
kotin报错处:
@InstallIn(ActivityComponent.class)
应该改为:
@InstallIn(ActivityComponent::class)