dagger

更新时间:2022-12-28 11:29:29 阅读: 评论:0


2022年12月28日发(作者:汽车美容行业)

四Dagger2的@Qulifier和@Named注解

概述:我们已经知道,@Module注解提供需要的实例对象。但是如果是同⼀类型的对象,不同的@Provides⽅法,Dagger2会选择哪个?

举个例⼦:provideStudent()和provideNewStudent(),返回的都是Student对象。同时写在Module中,会出现什么问题?

写个例⼦测试下:

@Module

publicclassMainModule{

@Provides

staticStudentprovideStudent(){

returnnewStudent();

}

@Provides

staticStudentprovideNewStudent(){

returnnewStudent();

}

@Provides

staticTeacherprovideTeacher(){

returnnewTeacher();

}

}

这⾥有两个⽅法同时返回了Student,我们编译⼀下。

报错了,提⽰Student重复了。那么怎么解决这个问题?

1@Qulifier

这时候就需要我们提供⼀个别名,让⽬标类成员变量的类型和创建⽅法的返回类型形成⼀对⼀的关系,⼀般来说,使⽤@Qulifier是⽐较标准的

⽅式。

1.1定义⼀个接⼝学⽣A和学⽣B,分别代表两个学⽣,然后⽤@Qualifier修饰

@Qualifier

@Retention(E)

public@interfaceStudentA{}

@Qualifier

@Retention(E)

public@interfaceStudentB{}

然后分别在Module加上对应注解

@Provides

@StudentA

staticStudentprovideStudent(){

returnnewStudent();

}

@Provides

@StudentB

staticStudentprovideNewStudent(){

returnnewStudent();

}

最后在引⽤的位置也加上注解,形成⼀对⼀的关系

publicclassMainActivityextendsAppCompatActivity{

@Inject

@StudentA

Studentstudent;

@Inject

@StudentB

Studentstudent1;

这样就可以保证,即使是返回相同的类型,也能保证⼀⼀对应的关系。

2@Named注解

除了上⾯的@Qualifier注解,还可以⽤@Named注解达到同样的效果

@Provides

@Named("StudentA")

staticStudentprovideStudent(){

returnnewStudent();

}

@Provides

@Named("StudentB")

staticStudentprovideNewStudent(){

returnnewStudent();

}

使⽤的时候

@Inject

@Named("StudentA")

Studentstudent;

@Inject

@Named("StudentB")

Studentstudent1;

本文发布于:2022-12-28 11:29:29,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/46377.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:牵挂造句
下一篇:objet
标签:dagger
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图