如何在芬兰湾的科特林中使用Dagger2

  介绍

本篇文章给大家分享的是有关如何在芬兰湾的科特林中使用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方法注入

规定方法:

该方法没有参数,返回一个需要被注入(或被提供)的依赖。一般用于为其他组件提供依赖的时候。

如何在芬兰湾的科特林中使用Dagger2