如何在运行时将动态参数传递给Dagger 2

时间:2017-09-05 10:41:58

标签: java android dependency-injection retrofit dagger-2

我刚开始用dagger2学习DI。不确定如何将用户凭据传递给Retrofit ServiceGenerator。

以下是我在模块中提供改装依赖性的方法

 @Provides
 @Singleton
 APIService provideAPIService() {
 return ServiceGenerator.createService(APIService.class,"", "");
 }

createService方法接受三个参数:服务,用户名和密码。我目前正在传递一个空字符串,因为目前不需要进行身份验证。这用于创建帐户。

这是我在我的存储库中获取依赖项的方法:

 @Inject
    APIService mAPIService;
    @Inject
    SharedPrefsHelper mSharedPrefsHelper;
    @Inject
    AppDatabase mAppDatabase;
    @Inject
    Context mContext;

    @Inject
    public SignupRepositoryImpl(AppDatabase appDatabase, APIService 
        apiService,SharedPrefsHelper sharedPrefsHelper, Context context){
        this.mAppDatabase = appDatabase;
        this.mAPIService = apiService;
        this.mSharedPrefsHelper = sharedPrefsHelper;
        this.mContext = context;

    }

现在,假设用户拥有登录凭据,如何修改模块中的ServiceGenerator依赖关系以包含用户提供的用户名和密码?

我想过修改模块以包含两个这样的参数:

 @Provides
 @Singleton
 APIService provideAPIService(String username, String Password) {
 return ServiceGenerator.createService(APIService.class, username, password);

 }

但我不知道从哪里开始,我如何在运行时传递参数?此外,用户可能会错误地输入错误的凭据,我需要知道如何使ServiceGenerator无效并传入不同的凭据。

PS:我不确定我是否提供了足够的信息,请提出任何要求。

0 个答案:

没有答案