匕首意图服务哈巴狗:没有喷油器工厂绑定到班级<>



我有一个名为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框架。

相关内容

  • 没有找到相关文章

最新更新