链接: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())
}
网友评论