Hilt如何根据不同的参数注入不同的实例?

新手上路,请多包涵

背景

在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对象实例。

方案

现在的做法是创建一个网络提供器NetworkServiceProviderChangDuanRemoteDataSource调用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实例自动改变?

阅读 633
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题