在被依赖的类的构造函数上添加 @Inject 注解,表示我可以提供这个对象,你们可以用。
public class Xxx {
@Inject
public Xxx(){
}
}
或者
class AddressBookPresenter : BasePresenter() {
@Inject
lateinit var addressServiceImpl: AddressServiceImpl
}
class AddressServiceImpl @Inject constructor() : AddressService {
}
既然有了可以使用的对象,那么就需要有人去用他,这时XxxActivity出现了,表示我需要他,快给我,我是需求者,需要用@Module表示。
@Module
public class XxxActivity extends AppCompatActivity {
@Inject
Xxx mXxx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
或者
/**
*Created by 付晓龙
*on 2018/10/9
*/
@Module
class AddressModule {
@Provides
fun addressService(service: AddressServiceImpl): AddressService {
return service
}
}
但是加进去了,需求者和提供者都有了,还没有用啊,该怎么用啊。这时就轮到@Component发挥作用了。然后,Dagger 预编译器会根据这个接口自动加上 Dagger- 前缀,生成一个实现类 DaggerXXXActivityComponent。
@Component
public interface XxxActivityComponent {
void inject(XxxActivity xxxActivity);
}
或者
/**
*Created by 付晓龙
*on 2018/10/9
*/
@PerComponentScope
@Component(dependencies = arrayOf(ActivityComponent::class), modules = arrayOf(AddressModule::class))
interface AddressComponent {
fun inject(activity: AddressBookActivity)
…
}
DaggerAddressComponent.builder().activityComponent(activityCoponent).addressModule(AddressModule()).build().inject(this)
这时提供者、需求者以及传递者都有,最后进行需要手动输入,决定注入的时机。这里就在 onCreate 注入 Xxx 对象,再次修改 XxxActivity,添加DaggerMainActivityComponent.create().inject(this):
@Module
public class XxxActivity extends AppCompatActivity {
@Inject
Xxx mXxx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerXxxActivityComponent.create().inject(this);
最后
文章所有资料全部已经打包整理好,免费分享给有需要的人,另外小编手头上整理了大量Android架构师全套学习资料,Android核心高级技术PDF文档+全套高级学习资料+视频+2021 BAT 大厂面试真题解析,都是免费分享给大家的,全部都已整理在GitHub上,有需要的朋友可以点击前往领取更多。
资料展示:
6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)领取更多。**
资料展示:
[外链图片转存中…(img-XtJqtzsN-1645159390571)]
[外链图片转存中…(img-PSHAhDFm-1645159390572)]
[外链图片转存中…(img-OOQuMTmR-1645159390573)]