Android 依赖注入Hilt

97 阅读1分钟

Hilt

compileOptions

增加依赖注入项 build.gradle


plugins{
    id("com.google.dagger.hilt.android") version "2.44" apply false
}

app/build.gradle

plugins{
    kotlin("kapt")
    id("com.google.dagger.hilt.android")
}

android{
    ...
}

dependencies{
    implementation("com.google.dagger:hilt-android:2.44")
    kapt("com.google.dagger:hilt-android-compiler:2.44")
}

kapt{
    correctErrorTypes = true
}

@HiltAndroidApp

@HiltAndroidApp
class MyApp: Application()

@AndroidEntryPoint 和 @Inject

  • 例子一
@AndroidEntryPoint
class MainActivity :ComponentActivity(){

    //实现依赖注入
    @Inject lateinit var a:A
}

class A @Inject constructor(
  b:B
){

}

class B @Inject constructor(){

}

  • 例子二: ViewModel @Inject
//这里可以在 Activity 中进行注入
class HomeViewModel @Inject constructor(
    private val requestBuilder:RequestBuilder
): ViewModel(){

}

@Module + @InstallIn

  • 例子一:作用域是Fragment
@Module
@InstallIn(FragmentComponent::class)
class RequestBuilderDi{

    @Provides
    //因为之前的@HiltAndroidApp 可以直接使用 @ApplicationContext 注入上下文
    fun getRequestBuilder(@ApplicationContext context:Context):RequestBuilder{
        return RequestBuilder()
    }
}

  • 例子二: 单例全局作用域
@Module
@InstallIn(SingletonComponent::class)
class RequestBuilderDi{

    @Provides
    @Singleton
    fun getRequestBuilder(@ApplicationContext context:Context):RequestBuilder{
        return RequestBuilder()
    }
}