首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kotlin使用Dagger2过程全纪录

这个注解本身并没有作用,它需要依赖于注入框架才具有意义,可以用来标记构造函数、属性和方法。 标记构造函数 被标记构造函数可以有0个多个依赖作为参数。 同一个中最多只可以标记一个构造函数。...还有一种做法是@Inject标记被注入某个方法,该方法会在构造方法之后接着被调用: data class People constructor(val name: String) { @Inject...(提供依赖。...injectable constructor and governs how the injector reuses instances of the type @Scope是用来标记包含可注入构造函数或者提供注入依赖对象...,简单来说,可以用来标记包含@Inject构造函数或者@Module

1.2K20

Hilt-依赖注入框架上手指南

,需要将 @Inject 添加到要注入构造函数中。...注意:在Kotlin中,仅包含@Provides函数模块可以是object。这样,提供程序就可以得到优化,并且几乎可以内联在生成代码中。...使用@Provides告诉Hilt如何获得具体实例 用来告诉Hilt 如何提供不能被构造函数注入类型 每当 Hilt 需要提供该类型实例时,将执行带注释函数函数主体。...由于AppDatabase是由Room生成,因此是项目拥有的另一个,因此我们直接复制原方法即可,这里 @Singleton 标志这个其方法只会被调用一次,类似于一个单例。...Binds作用就在于此。 需要注意以下使用条件: Binds 必须注释一个抽象函数,抽象函数返回值是我们为其提供实现接口。通过添加具有接口实现类型唯一参数来指定实现。

1.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

带你解析Dagger2

Dagger2具有以下好处: 1) 依赖注入和配置独立于组件之外,注入对象在一个独立、耦合地方初始化,这样在改变注入对象时,我们只需要修改对象实现方法,而不用大改代码库。...这样,Dagger就会构造一个这个实例并满足他们依赖。...@Module: Modules里面的方法专门提供依赖,所以我们定义一个,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要 依赖。...@Provide: 在modules中,我们定义方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。...给了我们一堆选择用来注入依赖: 构造方法注入:在构造方法前面注释@Inject 成员变量注入:在成员变量(非私有)前面注释@Inject 函数方法注入:在函数前面注释@Inject 这个顺序是

68340

Dagger2 Android应用:@Scope和@Subcomponent

这部分会介绍Dagger2中比较莫名概念,同样也涉及Android具体代码。...Heater构造方法此时就需要加入Maker对象,且必须以入参方式存在,而不能在构造方法里直接new一个,原因相信思考一下就明白。...我们需要修改两处地方,一个是Heater构造方法,一个是HeaterModuleprovide方法。...() {// return new ElectricHeater(new Cooker());// }} 实际上Moduleprovide方法也可以像注释代码那部分这么写,一样也可以做到给...Dagger2会在运行期判断这种情况,如果是一个不需要参数Module,那么它在没有传入module实例时候没有任何问题,Dagger2帮你实例化一个module对象;对于需要参数module而我们又忘了设

79220

「android」摆正姿势,dagger2,从精通到上瘾

我们可以用注解(Annotation)来标注目标中所依赖其他,同样用注解来标注所依赖其他构造函数,那注解名字就叫Inject class A{ @Inject B b; } class...B{ @Inject B(){ } } 这样我们就可以让目标中所依赖其他与其他构造函数之间有了一种无形联系。...我们讨论具体代码,我想从抽象概念角度来讨论Component。上文中提到Component在目标中所依赖其他与其他构造函数之间可以起到一个桥梁作用。...那我们看看这桥梁是怎么工作: Component需要引用到目标实例,Component会查找目标中用Inject注解标注属性,查找到相应属性后会接着查找该属性对应Inject标注构造函数...因此我们也可以给Component叫另外一个名字注入器(Injector) component.png 小结下 目标想要初始化自己依赖其他:用Inject注解标注目标中其他Inject注解标注其他构造函数

96030

上手指南 | Jetpack Hilt 依赖注入框架

@Inject 使用 @Inject 来告诉 Hilt 如何提供该类实例,常用于构造方法,非私有字段,方法中。...Hilt 有关如何提供不同类型实例信息也称之为绑定 @Module module 是用来提供一些无法用 构造@Inject 依赖,如第三方库,接口,build 模式构造等。...@Provides 常用于被 @Module 注解标记内部方法上。并提供依赖项对象。...Hilt 不支持中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应依赖。...使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数返回值是实现接口。通过添加具有接口实现类型唯一参数来指定实现。

1.6K20

上手指南 | Jetpack Hilt 依赖注入框架

@Inject 使用 @Inject 来告诉 Hilt 如何提供该类实例,常用于构造方法,非私有字段,方法中。...Hilt 有关如何提供不同类型实例信息也称之为绑定 @Module module 是用来提供一些无法用 构造@Inject 依赖,如第三方库,接口,build 模式构造等。...@Provides 常用于被 @Module 注解标记内部方法上。并提供依赖项对象。...Hilt 不支持中执行依赖注入,在这种情况下可以使用 @EntryPoint 注解进行创建,Hilt 会提供相应依赖。...---- 使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数返回值是实现接口。通过添加具有接口实现类型唯一参数来指定实现。

1.6K30

Dagger2 Android依赖注入学习笔记

@Inject Inject 主要用来标记需要依赖变量,告诉Dagger需要为它提供依赖;inject 还被用来标记构造函数。...当Dagger2碰到使用@Inject注解变量时,会去寻找这个变量对应被@Inject注解构造函数,把实例构造出来,为变量提供依赖。...@Module Module用于标注提供依赖。虽然我们有@Inject注解实现注入,但是@Inject只能注入构造函数为无参,要是构造函数是带参数呢?...那就要使用module注解来解决这个问题,又比如说,有很多第三方库,我们对它代码无法进行修改,也就不能对其构造函数加上@Inject注解,那么可咋办啊,@module注释可以很好解决我们问题。...@Provides Provides是与Module一起使用,@Provides用于标注Module所标注方法,该方法会在需要提供依赖时被调用,在方法内进行对象初始化,返回对象依赖给标注了

64630

Andriod-Dagger2

中要提供依赖注解方法用@Provides注解声明,以此来告诉Dagger构造对象并提供这些依赖 @Provides public PhotoUtil photoInstance...,我们直接在构造函数上声明了@Inject注解,这个注解有什么用呢?...当Component在所拥有的Module中找不到依赖需求方需要类型提供方法时,Dagger2就会检查该需要类型没有用@Inject声明构造方法,有则用该构造方法创建一个,注意:这次我没是没有在...答: 项目中我们会用到别人jar包,我们无法修改别人源码,就更别说在人家上添加注解了,所以我们只能通过Module提供 总结: 我们有两种方式可以提供依赖,一个是注解了@Inject构造方法...,一个是在Module里提供依赖,规则是这样:查找Module中是否存在创建该类方法,如果没有则查找Inject注解构造函数 4.高级使用 说完了基本使用,我们来看看Dagger2高级使用注解

2.2K10

轻松学,听说你还没有搞懂 Dagger2

@Inject 给一个相应属性做标记时,说明了它是一个依赖需求方,需要一些依赖。 @Inject 给一个构造方法进行注解时,表明了它能提供依赖能力。...对于被 @Inject 注解过构造方法或者在一个 Module 中被 @Provides 注解方法提供了依赖时,就可以直接返回传入参数,而第三方库或者 SDK 自带就必须手动创建了。...方法返回值可以提供一种类型对象,前提是这个对象被 @Inject 注解过构造方法或者在 Module 中被 @Provides 注解过方法提供。...@Inject 和 @Provides 优先级 可能有心思细腻同学会问,同样是提供依赖,如果一个被 @Inject 注解了构造方法,又在某个 Module 中 @Provides 注解方法提供了依赖...@Inject 注解过构造方法,另一方面在 Module 中它又通过 @Provides 提供了依赖。

1.9K20

Hilt三问—你了解依赖注入吗

举个例子:Activity中有一个user,正常情况下要使用这个user肯定是需要实例化它,不然他是个空值,但是用了依赖注入后,就不需要在Activity内部再去实例化,就可以直接使用它了。...用于提供依赖,也就是代表这个会用到注入实例。 @Inject。这个注解是用来告诉 Hilt 如何提供该类实例,它常用于构造函数、非私有字段、方法中。 Hilt支持哪些依赖注入。...@Provides * @Singleton 提供单例 */ @Provides @Singleton fun provideOkHttpClient():...@Provides。用于被 @Module注解标记内部方法,并提供依赖项对象。 @Singleton。...提供单例 3)为ViewModel提供专门注解 @ViewModelInject,在Viewmodel对象构造函数中使用 @ViewModelInject 注解可以提供一个 ViewModel。

1.1K00

Dagger2从懵懂到精通,在线学习那点事儿

之所以有Module主要是为了提供那些没有构造函数依赖,这些无法用@Inject标注,比如第三方库,系统,以及上面示例View接口。...时,发现构造函数有个参数,此时会在Module里查找提供这个依赖方法,将该View传递进去,这样就完成了presenter里View注入。...我们来重新理一遍上面的注入过程,首先弄清楚以下几个概念: @Inject 带有此注解属性构造方法将参与到依赖注入中,Dagger2会实例化有此注解 @Module 带有此注解,用来提供依赖,...里面定义一些用@Provides注解以provide开头方法,这些方法就是所提供依赖,Dagger2会在该类中寻找实例化某个所需要依赖。...,所以我们定义了一个,叫做MainModule,提供一个方法provideMainView,用来提供这个依赖,这个MainView是通过MainModule构造函数注入进来,接着我们需要定义Component

62700

Dagger2使用攻略-基础部分

常用注解 @Inject 这个注解有两个作用: 修饰需要注入属性,Dagger2 会自动注入 修饰被注入构造方法上;Dagger2 会在需要时候通过这个注解找到构造函数自动构造对象注入 public...相当与一个注射器角色,将依赖注入到需要地方。 刚刚通过上面的 @Inject 注解 了 提供依赖构造方法 和 需要注入属性,而这样还是不够,需要使用 @Comnponent 连接起来。...还可以定义 向外提供实例方法Dagger2 都会在编译时期生成相应代码。...@Module && @Provides @Module 这个注解用来标注提供依赖工厂。对,工厂,我是这么理解。 @Provides 这个注解用在提供定义提供依赖方法上,表示向外提供依赖。...方法返回类型就是提供依赖类型。 前面提到 @Inject 可以在注解在构造函数以用来提供依赖;而在 @Inject 不能满足需要时候这个就派上用场了。

1.8K40

快刀斩乱码—— Dagger2没有想象那么难

2是标记构造方法,告诉Dagger我可以提供这种类型依赖实例。 @Provide: 对方法进行注解,都是有返回类型。...不能标记其它我们自己不能修改,如第三方库,因为我们没办法用@Inject标记它们构造函数。...这次以一个Person为例,代码跟User类似,构造方法没有用@Inject标记。目标中需要给一个Person类型成员变量mPserson赋值。...完成上面两步之后我们会不会有这样思考:如果同时有@Module和@Inject构造方法提供同一实例,Dagger会调用哪个呢?这就牵涉到@Module和@Inject优先级问题了。...若构造方法中有参数,从步骤1依次开始初始化每个参数。 如果你要问:我既没有@Module提供实例,也没有@Inject标记构造方法会怎样?很简单,编译期就会报错。

1K20

Dagger2-从入门到精通(上)

这样,Dagger就会构造一个这个实例并满足他们依赖。...@Module: Modules里面的方法专门提供依赖,所以我们定义一个,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要 依赖。...; } } @Module: Modules里面的方法专门提供依赖,所以我们定义一个,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要依赖。...,因为我们UserModule需要context参数,所以我们选择这种构建方法 可以看到在创建对象时我们可以在module中像之前一样提供一个创建方法,第二种我们也可以通过在对象构造函数上加上@Inject...注解,这里我们需要一个url和context,我们只需要提供一个创建Stringurl方法即可,并通过UserModule构造函数将conetxnt传入,最后提供一个创建UserManager方法将两个参数穿进去

1.1K10
领券