满足Hilt-JetPack中的依赖注入(DI),但事实并非如此,因为Hilt只是Dagger2的包装。对于小型项目,它将能够作为一种更便捷的工具站起来,并与JetPack中的其他产品很好地集成在一起。
我就不一一介绍了如何添加到项目中,一切都很好的描述文章
做什么的?
Dagger2是一个相当复杂的DI,您可以很容易混淆其内容和放置位置。提出了无限数量的组件并增加了抽象数量。项目越大,混乱就越多。
而且,如果您想使用Dagger2,但花费很少的精力,那么就发明了Hilt。
为我们简化的是:
- 现成的组件(从名称中可以清楚地看到它们指的是什么)
- 应用组件
- ActivityRetainedComponent
- 活动组件
- 片段组件
- ViewComponent
- ViewWithFragmentComponent
- 服务组件
- 在模块中,指定要添加的组件
- 通过@AndroidEntryPoint Hilt,编译器生成用于组件创建和存储的整个模板(例如,ActivityRetainedComponent将在屏幕旋转后保存实体,ActivityComponent将重新创建)。
这段代码看起来很优雅(将为我们生成整个样板)
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
@Inject lateinit var testService: TestService
}
特征:
需要申请
您需要声明Application并标记@HiltAndroidApp,否则,Hilt将无法工作。
@HiltAndroidApp
class App : Application() { }
层次依赖
Hilt , Activity @AndroidEntryPoint
View @WithFragmentBindings Fragment @AndroidEntryPoint, Activity Fragment
Dagger2, , @InstallIn. , .
@InstallIn(ApplicationComponent::class)
@Module
class NetworkModule {
@Singleton
@Provides
fun provideHttpService(): HttpService {
return object : HttpService {
init {
Log.e("Tester", "HttpService initialized")
}
override fun request() {
Log.e("Tester", "HttpService::request")
}
}
}
}
Hilt, @InstallIn, , .
Component Subcomponent
, Dagger2, Hilt . :
DaggerLoginComponent.builder()
.context(this)
.appDependencies(
EntryPointsAccessors.fromApplication(
applicationContext,
LoginModuleDependencies::class.java
)
)
.build()
.inject(this)
@AndroidEntryPoint
- Activity ComponentActivity AppCompatActivity
- Fragment androidx.Fragment
- Retain
Hilt :
- Dagger Component-
- Application, Activity, Fragment, View ., @AndroidEntryPoint
- Dagger
ActivityRetainedComponent
ViewModel arch :
this.viewModelProvider =
new ViewModelProvider(
activity,
new ViewModelProvider.Factory() {
@NonNull
@Override
@SuppressWarnings("unchecked")
public <T extends ViewModel> T create(@NonNull Class<T> aClass) {
ActivityRetainedComponent component =
((GeneratedComponentManager<LifecycleComponentBuilderEntryPoint>)
activity.getApplication())
.generatedComponent()
.retainedComponentBuilder()
.build();
return (T) new ActivityRetainedComponentViewModel(component);
}
});
:
- Dagger2
- ( )
- boilerpate .
- Dagger2 ( , ..)
:
- , , Dagger2
- ,
- Dagger2
- , , Fragment Activity c @AndroidEntryPoint
:
- https://developer.android.com/training/dependency-injection/hilt-android
- https://developer.android.com/training/dependency-injection/hilt-multi-module
- https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d
- https://codelabs.developers.google.com/codelabs/android-dagger-to-hilt/