本篇文章给大家分享的是有关如何在芬兰湾的科特林中使用Dagger2,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>芬兰湾的科特林中配置Dagger2 强>
在应用模块的构建。gradle文件中进行如下配置,关于kapt的相关知识。
apply 插件:,& # 39;com.android.application& # 39; apply 插件:& # 39;kotlin-android& # 39; apply 插件:& # 39;kotlin-android-extensions& # 39; apply 插件:& # 39;kotlin-kapt& # 39; android { ,…… } dependencies { ,…… ,implementation & # 39; com.google.dagger:匕首:2.11 & # 39; ,kapt & # 39; com.google.dagger: dagger-compiler: 2.11 & # 39; }
相关常用注解:
- <李>
@ inject
李> <李>@ component
李> <李>@Module
李> <李>@Provides
李> <李>@ qualifier和@ named
李> <李>@Scope和@ singleton
李><强> @ inject 强>
@ inject注解只是jsr - 330中定义的注解,在javax。注入包中。这个注解本身并没有作用,它需要依赖于注入框架才具有意义,可以用来标记构造函数,属性和方法。
<强>标记构造函数强>
被标记的构造函数可以有0个或多个依赖作为参数。
同一个类中最多只可以标记一个构造函数。
class People @Inject 构造函数(val 名称:String =,“Tom")
注意在芬兰湾的科特林中这种写法是不被允许的,因为这等价于java中的多个构造方法<代码>人(字符串名称)、人()代码>正确的写法应该是这样:
data class People 构造函数(名称:val 字符串),{ ,@ inject ,()构造函数:,这(“Tom") }
<>强标记属性强>
被标记的属性不能是最后的,芬兰湾的科特林中不能是瓦尔。
被注入进的属性不能用私人修饰(是Dagger2不支持,而非@ inject不支持)。
, @ inject ,lateinit var 人们:
<强>标记方法强>
被标记的方法可以有0个或多个依赖作为参数。
方法不能是抽象的。
class HomeActivity :, AppCompatActivity (), { ,private lateinit  var 人们:人 ,@ inject ,fun setPeople(人:人){ this.people =,人 ,} }
这种方法注入和属性注入并没有什么本质上的不同,实现效果也基本一样,还有一种做法是@ inject标记被注入类的某个方法,该方法会在类的构造方法之后接着被调用:
data class People 构造函数(名称:val 字符串),{ ,@ inject ,()构造函数:,这(“Tom") ,init { ,println(“初始化:name"美元) ,} ,@ inject 你好,fun  () { ,println(“你好:name"美元) ,} } class HomeActivity : AppCompatActivity (), { ,@ inject lateinit var 人:人 ,override fun  onCreate (savedInstanceState:包?),{ ,super.onCreate (savedInstanceState) ,setContentView (R.layout.activity_home) ,//执行相关注入操作 ,…… ,println (people.toString ()) ,} }
运行结果是这样的:
01-02 11:57:30.995 16601 - 16601/?,我/system . out: init:汤姆 01-02 11:57:30.995 16601 - 16601/?,我/system . out:你好:汤姆 01-02 11:57:30.995 16601 - 16601/?,我/system . out:,人(name=汤姆)
<强> @ Component 强>
可以理解为一个注射器,可以算是Dagger2中最核心的一个注解,用来标记一个接口或者抽象类。使用@ Component标记的接口,会在编译时自动生成一个匕首+类名的实现类实现依赖注入。在组件中一般可以定义两种方法:
Members-injection方法:
该方法有一个参数,表示需要注入到的类,提醒匕首在该类中寻找需要被注入的属性(被@ inject标记)。
void 注入(SomeType someType);//无返回值 SomeType injectAndReturn (SomeType someType);//返回它的参数类型
等价于:
MembersInjector, getMembersInjector();//使用MembersInjector。injectMembers方法注入
规定方法:
该方法没有参数,返回一个需要被注入(或被提供)的依赖。一般用于为其他组件提供依赖的时候。