小白Dagger2的理解使用

链接:https://juejin.im/post/5ccd496de51d453b573ee29d
来源:掘金
这个比较容易理解的文章,mark 一下

一般的inject是标注在类的构造函数上,但是如果是第三方库的话,那么类就可能是第三方的,此时@inject 就不能用在类的构造函数上了,此时用@Module @Provides
比如吃炸鸡,定义一个德克士类:

class Dicos{
   String friedDrumstick;
    public Dicos() {
        friedDrumstick = "脆皮手枪腿";
    }
    public String returnDicos() {
        return "德克士:" + friedDrumstick;
    }
}

接着Componet注射器,用来连接@inject提供方 和@Inject依赖需求方的。定一个 DiscoComponent:

@Component(modules = [DicosModule::class])
public interface  DiscoComponent{
 void inject(HomeActivity homeActiivty)
}

接着在HomeActivity中定义Dicos变量:

class HomeActivity{
@Inject
Dicos dicos;
}

因为我们没有办法在类的构造函数上去@Inject, 所以需要Module通过@Provides提供 ,所以接着新建DicosModule:

@Module
public class DicosModule{
@Provides
Dicos getDicos(){
return new Dicos();
}
}

接着让DicosComponent依赖DicosModule,即加上modules==DicosModule.class
最后,make project后,HomeActivity里用Dagger2自动生成的DaggerDicosComponent.inject()实现注入依赖,如下:

class HomeActivity{
@Inject
Dicos dicos;
DaggerDicosComponent.builder().bulidModule(new DicosModule()).build.inject(this)
//可以使用Dicos定义的方法了
tv_test.setText(dicos.returnDicos())
}

你可能感兴趣的:(小白Dagger2的理解使用)