dagger2、hilt注入

模型

使用时候的问题

1、单例 必须的在全局定义

2、component 不允许同时注册2个类。需要把2个合并到一个component中,代码如下

第二个注入的类需要修改之前的注入方式

下面是2个component合并

类中的使用

 

合并后不要单独用他们的注解@Singleton单例模式,自己定义注解实现单利如下

3、编译很耗时
4、多个相同注解用 @Named
5、支持懒加载类
lazy(单例)
provider<A> 
6、注入都写到 di包下面(规范不强制)

Hilt介绍

无需编写大量的Component代码
Scope也会与Component自动绑定

目前支持以下类(如果其他类注入需要用到dagger2):
Application、Activity、Fragment、View、Service、BroadcastReceiver
组件生命周期

 相应的作用域

 原理:编译时期 gradle会执行app/intermediates/transforms/ 包下面,通过注解的类,生成对应的Hilt_xxx。然后通过字节码插庄修改当前的类继承Hilt_xxx在oncreate中再次引用了dagger2的代码,进行ioc注入。

字节码插庄的插件的路径:C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.dagger\hilt-android-gradle-plugin\2.28-alpha\eb33a043b2bbdc7cdee3c851d0f8532bfd3645a5\hilt-android-gradle-plugin-2.28-alpha-

如果使用kotlin最好使用Koin框架:轻量级的依赖注入框架,无代理,无代码生成,无反射

Hilt 和 Koin 进行全方面的分析:

1、AndroidStudio 支持 Hilt 在关联代码间进行导航,支持在 @Inject 修饰的构造器、@Binds 或者@Provides 修饰的方法、限定符之间进行跳转。
2、项目结构:完成 Hilt 的依赖注入需要的文件往往多于 Koin。
3、代码行数:使用 Statistic 工具来进行代码统计,反复对比了项目编译前和编译后,Hilt 生成的代码多于 Koin,随着项目越来越复杂,生成的代码量会越来越多。
4、编译时间:Hilt 编译时间总是大于 Koin,这个结果告诉我们,如果是在一个非常大型的项目,这个代价是非常昂贵。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hilt 是一个用于简化依赖注入的框架,可以在 Android 应用程序中使用它来管理和注入依赖项。下面是使用 Hilt 进行依赖注入的一个简单示例应用: 1. 添加 Hilt 相关依赖到项目中。在项目的根目录的 `build.gradle` 文件中添加 Hilt Gradle 插件的依赖: ```groovy buildscript { repositories { ... } dependencies { ... classpath 'com.google.dagger:hilt-android-gradle-plugin:<version>' } } ``` 在应用模块的 `build.gradle` 文件中应用 Hilt 插件,并添加 Hilt 相关依赖: ```groovy apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { ... } dependencies { implementation 'com.google.dagger:hilt-android:<version>' kapt 'com.google.dagger:hilt-android-compiler:<version>' ... } ``` 2. 在 Application 类上添加 `@HiltAndroidApp` 注解,将其标记为 Hilt 应用程序: ```kotlin import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MyApp : Application() { // Application 的实现代码... } ``` 3. 创建一个需要依赖注入的类,例如 UserRepository: ```kotlin import javax.inject.Inject class UserRepository @Inject constructor() { // UserRepository 的实现代码... } ``` 4. 在需要进行依赖注入的类中,使用 `@Inject` 注解来标记需要注入的依赖项。例如,在 MainActivity 中: ```kotlin import javax.inject.Inject @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var userRepository: UserRepository // Activity 的实现代码... } ``` 通过以上步骤,Hilt 会自动管理依赖项的创建和注入。在 MainActivity 中,`userRepository` 字段将会被自动注入一个 UserRepository 实例。 需要注意的是,使用 Hilt 进行依赖注入需要在 Android Studio 中启用 kapt 插件。 这只是一个简单的示例,Hilt 可以在更复杂的应用程序中提供更多的依赖注入功能和灵活性。 希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值