Hilt入门思想,DI框架撇一眼

Hilt 使用

配置gradle
项目gradle

buildscript {
    ext.kotlin_version = "1.3.72"
    ext.hilt_version = '2.28-alpha'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"

     
    }
}

app Gradle

apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

......
// Hilt dependencies
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"

程序的入口
->@HiltAndroidApp

package top.zcwfeng.hilt

import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class App : Application(){
}

User 类
-> 默认构造方法 @Inject

package top.zcwfeng.hilt.model

import javax.inject.Inject

data class User(val name:String,val desc:String) {
    @Inject
    constructor():this(name = "David",desc = "一言难尽")

}

-> @AndroidEntryPoint
Activity
Fragment
View
Service
BroadcastReceiver

package top.zcwfeng.hilt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import dagger.hilt.android.AndroidEntryPoint
import top.zcwfeng.hilt.databinding.ActivityMainBinding
import top.zcwfeng.hilt.model.User
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject
    lateinit var user: User
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val databinding: ActivityMainBinding =
            DataBindingUtil.setContentView(this, R.layout.activity_main)
        databinding.content.text = "${user.name}现在的心情是${user.desc}"

    }
}

对应layout



    
        
    

    

        

    

其实就是使用各种的注解标签,如 @inject

通俗的依赖注入?

类里面的变量,成员等,就是这个类的依赖,就是类依赖成员

依赖注入,就是这个类,这些变量和成员,由外部进行初动态始化的

Hilt 有什么用?

依赖注入有什么用?

自动加载
自动加载的关键:实现了数据共享

不共享的数据需要依赖注入吗?
当然还是需要,私有的属性不需要,不想被共享的也需要共享
因为这种初始化过程比较复杂。为了比较方便
多个地方需要共享,多个地方用,这个时候用依赖注入比较适合

Hilt基于Dagger的

Dagger 为什么不好用

配置麻烦

依赖无法追踪(变量是怎么被注入的,注入的那些地方标记是啥)

新版AndroidStudio解决了

要用Hilt 吗?

Hillt - Dagger 2 - koin
Dagger-Square-Google
Retrofit-Okhttp
Hilt-场景化 - Activity Fragment ViewModel View Application
Dagger 是依赖注入-ButterKnife (视图绑定,省代码的工具)

Dagger Koin 选择

公司商业项目:Dagger
个人项目:Koin
1.性能 Dagger 好于koin 编译可能Dagger比较慢
2.依赖图的安全性 Dagger完备性完整,但是上手很难
3.依赖关系的追踪 As4.2支持类似继承实现关系。Koin还没有

Hilt 和 Koin
Hilt基于Dagger简化了一些。相对选择Hilt

使用

Hilt 如何用,各种注解

详细使用,请参考官网,或者
https://dagger.dev/hilt/quick-start

更多信息参考

https://www.meetup.com/GDG-Beijing/events/271332618/

你可能感兴趣的:(Hilt入门思想,DI框架撇一眼)