Dagger2我感觉这个框架是很好用的,
依赖注入:
dagger : "com.google.dagger:dagger:${dependVersion.dagger2}",
daggerCompiler : "com.google.dagger:dagger-compiler:${dependVersion.dagger2}",
dagger2吧,构造器注入,比较常用吧
inject针头注射:
moudle 依赖, component管理器, provider提供,
appmodle提供一个ZhihuRepository;
@Provides
@Singleton
ZhihuRepository provideZhihuRepository(ZhihuDataRepository zhihuRepository) {
return zhihuRepository;
}
下面两个方法有意思,注意了,敲黑板:
ZhihuRepository是Module提供的,他被依赖到ZhihuNewsListUseCase,问题什么时候跑进这个构造器呢?
@Inject
public ZhihuNewsListUseCase(ZhihuRepository zhihuRepository) {
mZhihuRepository = zhihuRepository;
}
@Override
protected Flowable<ZhihuNewsEntity> buildUseCaseObservable(Void aVoid) {
return mZhihuRepository.getZhihuNewsList()
.flatMap(this::handleException);
}
为什吗会进入到ZhihuNewsListUseCase构造器里面?因为有使用到他啊,
在哪啊?
在这里下面,看到了吧,HomePresenter构造器里有ZhihuNewsListUseCase zhihuUseCase所以层层依赖注入,
@Inject public HomePresenter(ZhihuNewsListUseCase zhihuUseCase, GankioUseCase gankioUseCase, WeatherUseCase weatherUseCase, NeihanUseCase neihanUseCase, GaoxiaoUseCase gaoxiaoUseCase) { mZhihuUseCase = zhihuUseCase; mGankioUseCase = gankioUseCase; mWeatherUseCase = weatherUseCase; mNeihanUseCase = neihanUseCase; mGaoxiaoUseCase = gaoxiaoUseCase; }