在上一篇文章Dagger2最简单的入门我们写了一个最简单的demo来介绍Dagger2,我们通过@Inject注解构无参造器来注入对象
那么如果构造器有参数,且这个参数也需要注入,又该怎么写呢?
本篇基于上一篇文章Dagger2最简单的入门,代码片段也是以上一篇文章的demo修改的,所以看本篇之前先看上一篇
我们先增加一个Teacher类,其中的无参构造方法用@Inject标识
1 | public class Teacher { |
然后修改Student类原来的无参构造方法,增加一个Teacher参数,在toString()中增加显示老师的信息
1 | public class Student { |
ok,大工告成,就上面两步,直接运行看看
可以看到,注入Student对象的同时,也成功注入了Teacher对象
我们还是看下Dagger生成代码的注入流程
在MainActivity中调用如下代码
1 | DaggerMainActivityComponent.create().inject(this); |
DaggerMainActivityComponent中innect()方法再调用injectMainActivity()方法
injectMainActivity()方法内部调用了MainActivity_MembersInjector.injectStudent(),传入了activity对象和通过getStudent()方法获取的Student对象
我们看到getStudent()方法中直接new了一个Teacher对象,然后作为参数再new一个Student
1 |
|
最后看下MainActivity_MembersInjector的injectStudent()方法,直接将传入student赋值给activity的student成员变量,至此就成功把Student注入到MainActivity中
1 | public static void injectStudent(MainActivity instance, Student student) { |