Hilt的基本操作
用@Inject 对变量进行注解,表示【这个变量要用依赖注入的方式来加载】:
1. @Inject lateinit var user: User
用@Inject 对依赖的类的构造函数进行注解,表示【当要提供这个类的对象的时候,调用这个函数来创建对象】:
data class User constructor(var id: Int, var name:String,var mood :String ){
@Inject constructor() : this (1,"大力金刚","毫无波澜")
}
然后,要记得用@AndroidEntryPoint指出要被注入依赖的组件类:
@AndroidEntryPoint
class MainActivity : AppCompatActivity(){
}
以及,用HiltAndroidApp 来宣布你的Application要使用Hilt:
在你的应用类中使用:
@HiltAndroidApp
class HiltApp : Application()
作用域(范围内共享数据)
## 添加额外的作用域注解
@ActivityScoped
data class User constructor (var id :Int , var name :String,var mood:String){
@Inject constructor() :this (1,"大力金刚","毫无波澜")
}
提供更多依赖的方式
类型绑定
@Module
@InstallIn(ActivityComponent:: class)
abstract class HiltModule {
@Binds abstract fun bindAny(user : User) :Any
}
直接提供代码
@Provides:
@Module
@InstallIn(ActivityComponent::class)
object HiltModule2{
@Provides
fun provideUser():User{
val user=User()
user.name ="大力金刚"
user.mood="信息"
return user
}
}
总结
Hilt 有什么用
什么是依赖注入
1)依赖:一个类里面有变量,这些变量就是这个类的依赖,或者说,这个类依赖这些变量。
2)依赖注入:内部依赖的值不由你类自己来提供,而是由外部来交给这个类。
依赖注入有什么用
1)依赖注入的作用:自动加载
2)自动加载的作用:数据共享
3)不共享的数据,需要依赖注入么? 答:多数不需要,有一种例外:多处被使用,并且加载方式一致的,作用是【省事】
Hilt的作用
更方便地使用依赖注入。
延伸话题:
Dagger
Dagger为什么不好用
1).因为它完备和灵活的功能,导致了一些上手成本。----但可以被Hilt解决
2).依赖关系无法追踪。 ---但可以被新版Android Studio解决
Hilt会有Dagger的问题吗?
不会的。但是有前提: 你要用新版Android studio
Dagger、koin和hilt对比
1).易用性:Hilt =koit>Dagger
2).性能:Dagger=Hilt>Koin
3).依赖图的安全性:Dagger=Hilt>Koin
4).依赖关系的追踪:Dagger=Hilt>koin
5).编译时性能:koin>Dagger=Hilt
6).运行时性能:Dagger=Hilt>koin
依赖注入和视图绑定
依赖注入和视图绑定的区别:
1).依赖注入:我要,怎么来的我不管;
2).视图绑定:我要,而且我很明确需要这么这么加载,但我希望你把这件事做了。