Dagger2学习笔记

本文详细介绍Dagger2依赖注入框架的基本使用方法,包括如何通过@Module和@Provides提供实例,@Component指定注入目标,以及@Inject标记数据类的构造方法。通过具体示例,展示如何在Android应用中实现依赖注入。
摘要由CSDN通过智能技术生成
dependencies {
   //导入dagger
    implementation "com.google.dagger:dagger:2.12"
    kapt "com.google.dagger:dagger-compiler:2.12"
}





/**
 * Dagger2:依赖注入框架    依赖=创建实例+赋值变量
 * 基本使用方法:1,@Module  @Provides提供实例 或 @Inject标记数据类的构造方法
 *               2,@Component 指定注入的目标类和提供实例对象的类
 *               3,在目标类注册框架 指定赋值的变量
 */
class TestActivity : AppCompatActivity() {
    @Inject //指定框架赋值的变量
    lateinit var user: User

    @Inject //指定框架赋值的变量
    lateinit var user2: User2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)

        DaggerMyComponent.builder()  //注册框架  注意加前缀Dagger  DaggerMyComponent这个类由kapt框架编译时生成
            .build()
            .inject(this)

        text.text = user.name   //使用已赋值的变量
        text2.text = user2.name
    }
}



/**
 * 职责:为框架指定注入的目标类和提供实例对象的类
 */
@Component(modules = arrayOf(MyModule::class))
interface MyComponent {
    fun inject(activity: TestActivity)  //这里有个坑 一定要指明具体注入的类  eg: activity:TestActivity 而不是 Activity
}



/**
 * 职责:为框架提供实例对象
 */
@Module
class MyModule{
    @Provides //提供实例
    fun provideUser():User{
        return User()
    }
}



class User{
    val name= "我是通过Module类传过来的"
}

/**
 * @Inject->为框架指定创建实例的构造方法  若该构造方法有参数 则会在框架内继续寻找参数的实例或构造方法
 */
class User2 @Inject constructor() {
    val name="我是通过Inject注释传过来的"
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值