Hilt 是一个基于 Dagger 的依赖注入库,可以简化 Android 应用中的依赖注入流程。下面是在 Android 项目中使用 Hilt 的步骤:
1、添加 Hilt Gradle 插件
在项目的 build.gradle 文件中添加以下依赖:
buildscript {
repositories {
google()
}
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>'
}
}
并在 app 的 build.gradle 文件中应用插件:
plugins {
...
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
android {
...
}
dependencies {
...
implementation 'com.google.dagger:hilt-android:<version>'
kapt 'com.google.dagger:hilt-android-compiler:<version>'
}
2、在 Application 类中添加 Hilt
在 Application 类上添加 @HiltAndroidApp 注解。
@HiltAndroidApp
class MyApplication : Application() {
...
}
3、添加依赖注入类
创建一个或多个依赖注入类,使用 @Module 和 @Provides 注解来提供依赖项。
@Module
@InstallIn(ApplicationComponent::class)
object MyModule {
@Provides
fun provideMyDependency(): MyDependency {
return MyDependencyImpl()
}
}
4、在需要使用依赖项的类中添加 @Inject 注解
在需要使用依赖项的类的构造函数上添加 @Inject 注解,Hilt 将自动注入所需的依赖项。
class MyViewModel @Inject constructor(
private val myDependency: MyDependency
) : ViewModel() {
...
}
以上是在 Android 项目中使用 Hilt 的基本步骤,可以根据实际需求进行调整。
比如,使用Hilt依赖注入Retrofit
1、添加依赖
在项目的 build.gradle 文件中添加以下依赖:
implementation 'com.google.dagger:hilt-android:2.40.5'
kapt 'com.google.dagger:hilt-android-compiler:2.40.5'
2、在 Application 类中添加 Hilt 注解
在 Application 类上添加 @HiltAndroidApp 注解,这将告诉 Hilt 应用使用 Hilt 进行依赖注入。
@HiltAndroidApp
public class MyApplication extends Application {
...
}
3、创建依赖注入模块
在应用的依赖注入模块中,我们可以使用 @Module 注解来标记一个类,表示它是一个依赖注入模块。在这个类中,我们可以使用 @Provides 注解来标记一个方法,表示它可以提供一个依赖项的实例,这个模块提供了一个 Retrofit 实例,这个实例可以在其他地方使用。
@Module
@InstallIn(ApplicationComponent.class)
public class NetworkModule {
@Provides
public static Retrofit provideRetrofit() {
return new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build();
}
}
4、在需要使用依赖项的类中添加 Hilt 注解
在需要使用依赖项的类中,我们可以使用 @AndroidEntryPoint 注解来标记一个类,表示它可以接受依赖注入。在这个类中,我们可以使用 @Inject 注解来标记一个变量,表示它需要依赖项的实例。
@AndroidEntryPoint
public class MyActivity extends AppCompatActivity {
@Inject
Retrofit retrofit;
...
}
在这个类中,我们使用 @Inject 注解来标记 Retrofit 变量,表示它需要一个 Retrofit 实例。Hilt 将会自动注入这个变量,这样我们就可以在这个类中使用 Retrofit 实例了。