我有一个名为LoginService的IntentService,我试图用LoginScope 在loginActivity上贡献它
为dagger图贡献登录活动:
@LoginScope
@ContributesAndroidInjector(
modules = {
LoginViewModelModule.class,
LoginFragmentBuilderModule.class,
LoginNetworkBuilderModule.class,
LoginServiceBulderModule.class
}
)
abstract LoginActivity contributeLoginActivity();
此外,我还尝试贡献LogiService,将DaggerIntentService扩展到Graph:
登录服务BulderModule.class:
@ContributesAndroidInjector
abstract LoginService contributeLoginService();
登录服务.class:
public class LoginService extends DaggerIntentService {
private static final String TAG = "LoginService";
@Inject
LoginFirebaseHelper loginFirebaseHelper;
public LoginService() {
super("LoginService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(TAG, "onHandleIntent: LoginService");
if (intent.getAction().equals(Constants.ACTION_START_LOGIN)){
String oracle = intent.getStringExtra(Constants.ORACLE);
String password = intent.getStringExtra(Constants.PASSWORD);
loginFirebaseHelper.startLoginFB(oracle, password);
}
}}
我提供了LoginFirebaseHelper:LoginNetworkBuilderModule.class:
@LoginScope
@Provides
static LoginFirebaseHelper provideLoginFirebaseHelper(Application application, DatabaseReference databaseReference, FirebaseAuth firebaseAuth){
return new LoginFirebaseHelper(application, databaseReference, firebaseAuth);
}
当我在@Singlton上为应用程序的顶层贡献Loginsevice时,代码运行良好(当我在AppModule上提供LoginFirebaseHelper并通过LoginNetworkBuilderModule.lass为应用程序组件贡献Loginserve时(但当我使用上面的代码时,我会得到下一个pug
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<....core.network.service.LoginService>
您需要将为您的服务声明@ContributesAndroidInjector的模块安装到应用程序中。
只有这样,dagger支持框架才能找到登录服务的注射器工厂。
要理解,只需将LoginServiceBulderModule安装到应用程序组件中即可。
@Singleton
@Component(modules = {LoginServiceBulderModule.class}) // you need to install it here
interface AppComponent {
}
我假设您的应用程序类实现HasAndroidInjector。如果不遵循上提到的指南https://www.dagger.dev关于如何使用Dagger支持Android框架。