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

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

,需要将 @Inject 添加到要注入构造函数。...netDataSource = NetDataSource() } } 这样用没有什么问题,我们大多数时候都是这样干,当然在kt可以使用 by lazy,不过具体看你自己场景了。...注意:在Kotlin,仅包含@Provides函数模块可以是object类。这样,提供程序就可以得到优化,并且几乎可以内联在生成代码。...使用@Provides告诉Hilt如何获得具体实例 用来告诉Hilt 如何提供不能被构造函数注入类型 每当 Hilt 需要提供该类型实例时,将执行带注释函数函数主体。...Binds作用就在于此。 需要注意以下使用条件: Binds 必须注释一个抽象函数,抽象函数返回值是我们为其提供实现接口。通过添加具有接口实现类型唯一参数来指定实现。

1.6K10

Dagger2 Android应用:@Scope和@Subcomponent

这部分会介绍Dagger2比较莫名概念,同样涉及Android具体代码。...Dagger2作用域 @Scope 作用域是Dagger2一个比较重要概念,各种奇淫巧技,比如单例,都是通过它来实现。...是的其实在Dagger2,单例对象实现方式就是用@Scope,Dagger2给开发者提供了一个默认已经定义好单例注解,@Singleton。...Heater构造方法此时就需要加入Maker对象,且必须以入参方式存在,而不能在构造方法里直接new一个,原因相信思考一下就明白。...Dagger2会在运行期判断这种情况,如果是一个不需要参数Module,那么它在没有传入module实例时候没有任何问题,Dagger2帮你实例化一个module对象;对于需要参数module而我们又忘了设

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

带你解析Dagger2

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

68340

kotlin使用Dagger2过程全纪录

前言 Dagger2作为依赖注入神器,相信很多朋友都听说过它大名。只不过它有些概念,理解起来并不是那么清晰,并且在使用过程比较迷糊。...这个注解本身并没有作用,它需要依赖于注入框架才具有意义,可以用来标记构造函数、属性和方法。 标记构造函数 被标记构造函数可以有0个或多个依赖作为参数。 同一个类中最多只可以标记一个构造函数。...class People @Inject constructor(val name:String = "Tom") 注意在kotlin这种写法是不被允许,因为这等价于java多个构造方法People...(people:People){ this.people = people } } 这种方法注入和属性注入并没有什么本质上不同,实现效果基本一样。...同时Module可以通过includes依赖其他Module。 @Provides 用来标记Module方法,该方法返回类型是你需要提供依赖类型。

1.2K20

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

注解过构造方法,也没有办法从一个被 @Provides 注解过方法获取。...方法返回值可以提供一种类型对象,前提是这个类对象被 @Inject 注解过构造方法或者在 Module 中被 @Provides 注解过方法提供。...@Inject 和 @Provides 优先级 可能有心思细腻同学会问,同样是提供依赖,如果一个类被 @Inject 注解了构造方法,又在某个 Module @Provides 注解方法提供了依赖...@Inject 注解过构造方法,另一方面在 Module 它又通过 @Provides 提供了依赖。...因为 Dagger2 是根据返回类型来进行依赖关系确定。如果存在两个方法返回一样类型,那么正常情况下 Dagger2 显然就没有办法处理了。 不过,Dagger2 给出了解决方案。

1.9K20

Dagger2 Android依赖注入学习笔记

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

64630

在 Kotlin 中使用 Dagger 会遇到陷阱和优化方法

忘记添加 field: 如果在 Dagger 存在一个匹配该类型实例,则可能会导致注入到错误对象。...Provides 方法来提高性能 如果使用是静态 @Provides 方法,那么 Dagger 生成代码将具有更好性能。...v2.25 版本,您不再需要使用 @JvmStatic 来标记 @Provides 函数了,Dagger 会正确地识别它。...在 Kotlin 函数返回类型是可选,甚至 IDE 有时会建议您重构代码使用内联方法体来隐藏返回值类型声明。 如果推断类型与您所期望类型不一致,就会引起 bug 出现。...本次 Dagger 带来优化不会带来额外损耗,遵循这些最佳实践,诸如启用增量注释处理、禁用格式化设置以及使用静态 @Provides 方法等,可以缩短项目的构建时间。

1K30

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

在学习使用dagger2过程,我遇到了以下一些困惑: dagger2Inject,Component,Module,Provides等等都是什么东东,有什么作用?...我们讨论具体类代码,我想从抽象概念角度来讨论Component。上文中提到Component在目标类中所依赖其他类与其他类构造函数之间可以起到一个桥梁作用。...因此我们可以给Component叫另外一个名字注入器(Injector) component.png 小结下 目标类想要初始化自己依赖其他类:用Inject注解标注目标类其他类 用Inject注解标注其他类构造函数...中去查找用Provides标注对应创建类实例方法,这样就可以解决第三方类库用dagger2实现依赖注入了。...总结 Inject,Component,Module,Providesdagger2最基础最核心知识点。奠定了dagger2整个依赖注入框架。

96030

Andriod-Dagger2

提供依赖注解方法用@Provides注解声明,以此来告诉Dagger构造对象并提供这些依赖 @Provides public PhotoUtil photoInstance...(){ return new PhotoUtil(); } } 接下来用在modules,我们定义方法用@Provides注解,以此来告诉Dagger我们想要构造对象并提供这些依赖...,我们直接在构造函数上声明了@Inject注解,这个注解有什么用呢?...当Component在所拥有的Module类找不到依赖需求方需要类型提供方法时,Dagger2就会检查该需要类型没有用@Inject声明构造方法,有则用该构造方法创建一个,注意:这次我没是没有在...,一个是在Module里提供依赖,规则是这样:查找Module是否存在创建该类方法,如果没有则查找Inject注解构造函数 4.高级使用 说完了基本使用,我们来看看Dagger2高级使用注解

2.2K10

Dagger2_daggerlimit

参考 Android_Dagger2篇——从小白最易上手角度 + 最新dagger.android 都是套路——Dagger2没有想象那么难 一、无module方式,无参构造 (最简单...在需要实例化构造无参构造方法,注解@Inject 必须是无参构造方法 @Inject public Student() { } 2....在需要实例化构造方法注解@Inject 可以带有参数 @Inject public Student(String name, int age) { this.name = name;...构造Module类 注解@Module 构造一个返回类型为需要注入对象方法,注解@Provides @Module public class StudentModule { @Provides...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

28020

上手指南 | 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

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

今天继续Jetpack专题,相信不少朋友都使用过Dagger放弃过Dagger,因为实在太难用了。...用于提供依赖,也就是代表这个类会用到注入实例。 @Inject。这个注解是用来告诉 Hilt 如何提供该类实例,它常用于构造函数、非私有字段、方法。 Hilt支持哪些类依赖注入。...如果是其他Android类,必须在它依赖Android类添加同样注解,例如在 Fragment 添加@AndroidEntryPoint注解,必须在Fragment依赖Activity上添加...@Provides。用于被 @Module注解标记类内部方法,并提供依赖项对象。 @Singleton。...提供单例 3)为ViewModel提供专门注解 @ViewModelInject,在Viewmodel对象构造函数中使用 @ViewModelInject 注解可以提供一个 ViewModel。

1.1K00

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

这种联系我们可以这样理解,当看到某个类被@Inject标记时,就会到他构造方法,如果这个构造方法被@Inject标记的话,就会自动初始化这个类,从而完成依赖注入。...之所以有Module类主要是为了提供那些没有构造函数依赖,这些类无法用@Inject标注,比如第三方类库,系统类,以及上面示例View接口。...我们来重新理一遍上面的注入过程,首先弄清楚以下几个概念: @Inject 带有此注解属性或构造方法将参与到依赖注入Dagger2会实例化有此注解类 @Module 带有此注解类,用来提供依赖,...里面定义一些用@Provides注解以provide开头方法,这些方法就是所提供依赖,Dagger2会在该类寻找实例化某个类所需要依赖。...然后,我们对MainPresenter构造函数添加注解@Inject,此时构造函数里有一个参数MainContract.View,因为MainPresenter需要依赖MainContract.View

62700

Android 使用dagger2进行依赖注入(基础篇)

一旦我们UserModel创建方式发生了改变(比如需要传入Context对象到构造函数),我们就需要修改所有创建UserModel代码。...因为dagger2在编译时生成依赖注入代码,会到inject方法参数类型寻找可以注入对象,但是实际上这些对象存在于MainActivity,而不是Activity。...如果函数声明参数为Activity,dagger2会认为没有需要注入对象。...2.3 低级Component提供依赖 目前ActivityComponent代码如下所示。可以看到其只提供inject方法,而没有提供需要UserModel依赖。...最后 本文试图用最简单例子介绍Android如何使用dagger2进行依赖注入,因此有很多dagger2特性并未涉及,比如@Scope注释,以及dagger2自动生成代码分析调试。

1K70

Dagger2-从入门到精通(上)

@Module: Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要 依赖。...; } } @Module: Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要依赖。...@Provide: 在modules,我们定义方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。 现在我们回头在看看概念是不就明白其中含义了。...,因为我们UserModule需要context参数,所以我们选择这种构建方法 可以看到在创建对象时我们可以在module像之前一样提供一个创建方法,第二种我们可以通过在对象构造函数上加上@Inject...注解,这里我们需要一个url和context,我们只需要提供一个创建Stringurl方法即可,并通过UserModule构造函数将conetxnt传入,最后提供一个创建UserManager方法将两个参数穿进去

1.1K10

Dagger2使用攻略-基础部分

Dagger2 是编译时框架,会在编译时根据你注解配置生成需要代码。 ---- 下面是我对 Dagger2 常用注解理解。...常用注解 @Inject 这个注解有两个作用: 修饰需要注入属性,Dagger2 会自动注入 修饰被注入构造方法上;Dagger2 会在需要时候通过这个注解找到构造函数自动构造对象注入 public...还可以定义 向外提供实例方法Dagger2 都会在编译时期生成相应代码。...@Module && @Provides @Module 这个注解用来标注提供依赖工厂。对,工厂,我是这么理解。 @Provides 这个注解用在提供定义提供依赖方法上,表示向外提供依赖。...方法返回类型就是提供依赖类型。 前面提到 @Inject 可以在注解在构造函数以用来提供依赖;而在 @Inject 不能满足需要时候这个就派上用场了。

1.8K40

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

2是标记类构造方法,告诉Dagger我可以提供这种类型依赖实例。 @Provide: 对方法进行注解,都是有返回类型。...不能标记其它我们自己不能修改类,如第三方库,因为我们没办法用@Inject标记它们构造函数。...这次以一个Person类为例,代码跟User类似,构造方法没有用@Inject标记。目标类需要给一个Person类型成员变量mPserson赋值。...步骤如下: 查找Module是否存在创建该类型方法(前提是@Conponent标记接口中包含了@Module标记Module类,如果没有则直接找@Inject对应构造方法) 若存在方法,查看该方法是否有参数...若构造方法中有参数,从步骤1依次开始初始化每个参数。 如果你要问:我既没有@Module提供实例,也没有@Inject标记构造方法会怎样?很简单,编译期就会报错。

1K20
领券