背景
在android中使用hilt或dagger自动注入
public class AliyunServiceImpl implements IChangDuanRemoteService{}
public class GiteeServiceImpl implements IChangDuanRemoteService{}
public class GitlabServiceImpl implements IChangDuanRemoteService{}
public class NetworkServiceProvider {
@Inject
public NetworkServiceProvider(AliyunServiceImpl aliyunService, GiteeServiceImpl giteeService, GitlabServiceImpl gitlabService) {
//
}
public IChangDuanRemoteService getChangDuanRemoteService() {
FetchRepositoryConfig.REPOSITORY_ENUM repositoryEnum = FetchRepositoryConfig.getRepositoryType();
if (repositoryEnum == FetchRepositoryConfig.REPOSITORY_ENUM.GITEE) {
return giteeService;
} else if (repositoryEnum == FetchRepositoryConfig.REPOSITORY_ENUM.CODEUP) {
return aliyunService;
} else if (repositoryEnum == FetchRepositoryConfig.REPOSITORY_ENUM.GITLAB) {
return gitlabService;
}
throw new NotFoundRemoteRepositoryException();
}
}
public class ChangDuanRemoteDataSource {
@Inject
public ChangDuanRemoteDataSource(NetworkServiceProvider networkServiceProvider) {
//
}
public Single<String> getAllChangDuan() {
return networkServiceProvider.getChangDuanRemoteService().getAllChangDuan();
}
}
需求
ChangDuanRemoteDataSource
需要根据FetchRepositoryConfig.REPOSITORY_ENUM
获取不同的IChangDuanRemoteService
对象实例。
方案
现在的做法是创建一个网络提供器NetworkServiceProvider
。ChangDuanRemoteDataSource
调用networkServiceProvider.getChangDuanRemoteService()
。
问题
请问能否在ChangDuanRemoteDataSource
中直接注入IChangDuanRemoteService
,如下:
public class ChangDuanRemoteDataSource {
@Inject
public ChangDuanRemoteDataSource(IChangDuanRemoteService changDuanRemoteService) {
this.changDuanRemoteService = changDuanRemoteService;
}
public Single<String> getAllChangDuan() {
return changDuanRemoteService.getAllChangDuan();
}
}
当FetchRepositoryConfig.REPOSITORY_ENUM
改变后,ChangDuanRemoteDataSource
中的IChangDuanRemoteService
实例自动改变?