Hilt 通过为项目中的每个 Android 类提供容器并自动管理其生命周期,提供了一种在应用中使用 DI(依赖项注入)的标准方法,基于dagger开发,主要实现在android场景的具体应用。
关于依赖注入
依赖注入简单描述就是由外部构建实例
- 带参数的构造函数
data class Student(val id:Long, val name:String)
val sudent = Student(1L, "a")
- 工厂模式
val factory = ComputerFactory()
val computer = factory.newComputer()
Hilt具体使用
hilt使用注解的方式自动注入
@HiltAndroidApp
class ExampleApplication:Application()
生成的这一 Hilt 组件会附加到 Application 对象的生命周期,并为其提供依赖项。此外,它也是应用的父组件,这意味着,其他组件可以访问它提供的依赖项。
Hilt通过为被依赖类的构造函数添加@Inject注解,来告知Hilt如何提供该类的实例
class Computer @Inject constructor() {
fun powerUp() {}
fun shutdown() {}
}
//MainActivity
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var computer: Computer
override fun onCreate(savedInstanceState: Bundle?) {...}
}
Hilt 可以为带有 @AndroidEntryPoint 注解的其他 Android 类提供依赖项,支持:
ViewModel(通过使用@HiltViewModel)
@HiltViewModel
class ExampleViewModel @Inject constructor(
private val savedStateHandle: SavedStateHandle,
private val repository: ExampleRepository
) : ViewModel() {}
ActivityFragmentViewService
模块
@Module
@InstallIn(SingletonComponent::class)
object AppDataStoreModule {
@Provides
@Singleton
fun provideDataStore(@ApplicationContext context: Context): DataStore<Preferences> =
context.dataStore
}
val Context.dataStore by preferencesDataStore(name = Constant.DATA_STORE_NAME)
//使用
@HiltViewModel
class ExampleViewModel @Inject constructor(
private val dataStore: DataStore<Preferences>
) : ViewModel() {}