前两篇实现了简单的Dagger2注入,这篇介绍下多层依赖,使用component作为component的依赖,实现多层级的依赖注入。
1.新建一个CClass类,如下
public class CClass {
public String sex;
@Inject
public CClass(String sex){
this.sex=sex;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.新建module,如下
@Module
public class MyTwoModule {
@Provides
public CClass provideCClass(String sex) {
return new CClass(sex);
}
@Provides
public String provideString(){
return "man";
}
}
3.新建component
@ActivityScope
@Component(dependencies = MyComponent.class,modules = MyTwoModule.class)
public interface MyTwoComponent {
void inject(MainActivity activity);
}
使用了dependencies的方式依赖了另一个component
4.修改被依赖的component
修改前
@ActivityScope
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(MainActivity activity);
}
修改后
//@ActivityScope
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(MainActivity activity);
/*当它作为depend给其他Component依赖的时候,得暴露下面的对象,不然下面得不到*/
AClass aClass();
BClass bClass();
}
注意:如果依赖的component限定了@ActivityScope,则被依赖的一定不能写一样的(否则报错),要在被依赖的component里面暴露出要依赖的对象,否则拿不到。
5.进行注入
/*****************
* 多层依赖
*****************/
@Inject
AClass aClass;
@Inject
BClass bClass;
@Inject
CClass cClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*多层依赖*/
MyComponent myComponent = DaggerMyComponent.builder().myModule(new MyModule("小红")).build();
DaggerMyTwoComponent.builder().myComponent(myComponent).myTwoModule(new MyTwoModule()).build().inject(this);
Log.e("yan", aClass.getName() + "," + bClass.getName() + "," + cClass.getSex());
}
打印:小红,B,man