本文适合有必定的Dagger2使用基础的同窗java
上一篇:dagger.android多模块项目实现(二)
下一篇:[Hilt多模块项目实现(二)]()android
前两篇咱们讲了dagger.android在多模块项目中的用法能够看到dagger.android让Android项目依赖注入变得更简单。但这还不是最简单的,android官方最近又给出了一个新的Hint。它是dagger.android的升级版,如今还只是alpha版,Hilt 使用起来超级简单,不须要咱们定义任何Component,只须要Module就能够了。git
单个模块的项目按官网作就能够,多模块项目中,普通多模块项目和单模块项目没有区别,本篇咱们先讲下普通多模块项目的实现。github
咱们在dagger.android多模块项目(一)的基础上改造实现segmentfault
全部Component都删掉,只留下Module和Activity就能够了api
先添加Hilt依赖app
在项目build.gralde中加上ide
buildscript { dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.29-alpha' } }
在全部使用到Hilt的模块的build.gralde中加上,这里有点比较奇怪按理hilt-android用api方法引入放在base模块就能够的,可是这样却会报错,也许是Hilt的一个bug吧。gradle
apply plugin: 'com.android.application' //apply plugin: 'com.android.library' apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' dependencies { implementation "com.google.dagger:hilt-android:2.29-alpha" kapt "com.google.dagger:hilt-android-compiler:2.29-alpha" }
app模块:ui
在AppApplication加上一个@HiltAndroidApp注解,注意不要加到BaseApplication上去了
@HiltAndroidApp class AppApplication : BaseApplication() { }
AppModule加上一个@InstallIn(ApplicationComponent::class) 这个代码AppModule为ApplicationComponent提供依赖
@Module @InstallIn(ApplicationComponent::class) class AppModule { @IntoSet @Provides fun provideString(): String { return "app" } }
user,news模块:
UserModule、NewsModule加上一个@InstallIn(ActivityComponent::class) 这个代码表示UserModule、NewsModule为ActivityComponent提供依赖
@Module @InstallIn(ActivityComponent::class) class NewsModule { @IntoSet @Provides fun provideString(): String { return "news" } } @Module @InstallIn(ActivityComponent::class) class UserModule { @IntoSet @Provides fun provideString(): String { return "user" } }
UserActivity、NewsActivity加上一个@AndroidEntryPoint,这表明这个Activity须要Hint注入对象,注意,这个不能够加在BaseActivity上,这样作没用,只能加在最终页面上
@AndroidEntryPoint class NewsActivity : BaseActivity() { @Inject lateinit var set: Set<String> override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_news) text.text = set.toString() } } @AndroidEntryPoint class UserActivity : BaseActivity() { @Inject lateinit var set: Set<String> override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_user) text.text = set.toString() } }
到这里Hilt注入就完成了,是否是超级简单