简单来说我们要实现的就是在MainActivity中注入一个Student对象,在Student对象中又注入一个Teacher对象
实现代码
二话不说,直接上代码
Student
1 | public class Student { |
Teacher
1 | public class Teacher { |
MainActivityComponent
1 |
|
MainActivity
1 | public class MainActivity extends AppCompatActivity { |
运行结果
可以看到Student对象成功注入到了Activity中,而Student对象也成功注入到Student中
背后的原理
Dagger通过我们的注解自动生成了很多的代码,如下这些类都是Dagger帮我们生成的
里面的代码其实很简单,我就不一一黏贴上来了,自己可以建个工程跑一下就会生成这些文件,自己点进入看一下
我们主要看下注入的流程,从MainActivity中的注入开始看:
MainActivity的onCreate方法中开启注入
1 | DaggerMainActivityComponent.create().inject(this); |
DaggerMainActivityComponent中的代码,直接看很清晰
injectMainActivity完成的动作是把Student对象注入到MainActivity,通过MainActivity_MembersInjector.injectStudent()方法来完成
injectStudent完成的动作是把Teacher对象注入到Student中,通过Student_MembersInjector.injectTeacher()方法来完成
1 |
|
最后看下以下两个Injector的注入实现,很简单,直接把注入对象赋值给被注入对象内的成员变量,大功告成
MainActivity_MembersInjector.injectStudent()方法:
1 | public static void injectStudent(MainActivity instance, Student student) { |
Student_MembersInjector.injectTeacher()方法:
1 | public static void injectTeacher(Student instance, Teacher teacher) { |