Hilt多模塊項目實現(一)

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

代碼地址

相關文章
相關標籤/搜索