作者:苏木影子Hc_657 | 来源:互联网 | 2022-10-21 10:45
1> Prokash Sark..:
Dagger通过自己的依赖关系图促进依赖关系的解耦。我们需要告诉匕首类如何生成,例如,它需要一个构造函数参数。定义后,它将遍历所有依赖项并从低级别开始创建它们。如果我们不能在构造函数中注入任何依赖,例如Retrofit,我们可以手动告诉dagger如何创建带@Provides
注释的if实例。
让我们来看一个例子:
依赖性#1-个体模
@Module
class NetworkModule {
@Provides
fun provideRetrofit() : Retrofit
}
依赖性#2-取决于依赖性#1
class ApiService constructor (@Inject retrofit: Retrofit){
}
依赖#3-依赖于依赖#2
class SomeRepository constructor (@Inject apiService: ApiService){
}
依赖#4-依赖于依赖#3
class SomeViewModel constructor (@Inject someRepository: SomeRepository) : ViewModel {
}
Dagger将在运行时生成所有依赖项。当您运行应用程序时,每个依赖项已准备就绪,可以直接注入构造函数中。您还可以通过字段注入来注入所有这些依赖项
class MainAcitivty : AppCompatActivity(){
@Inject someRepository: SomeRepository
}
符合您目前的做法:
val someRepository = SomeRepository()
viewModel.init(someRepository)
您将SomeRepository()
在不同的活动中反复创建一个新实例
如果SomeRepository()
有任何依赖,那些也会被创建多次
您正在紧密耦合。如果SomeRepository()
没有依赖项,将很难测试。在单元测试中,我们有兴趣测试单元而不是其依赖项。