本文適合有必定的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注入就完成了,是否是超級簡單