DaggerIntentService哈巴狗:没有针对Class <>的注射器工厂绑定,<>

问题描述 投票:0回答:1

我有一个名为LoginService的IntentService,我尝试使用LoginScope在loginActivity上提供它

将登录活动贡献给Dagger图形:

    @LoginScope
@ContributesAndroidInjector(
        modules = {
                LoginViewModelModule.class,
                LoginFragmentBuilderModule.class,
                LoginNetworkBuilderModule.class,
                LoginServiceBulderModule.class
        }
)
abstract LoginActivity contributeLoginActivity();

此外,我尝试提供将DaggerIntentService扩展到Graph的LoginService:

LoginServiceBulderModule.class:

    @ContributesAndroidInjector
abstract LoginService contributeLoginService();

LoginService.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上的应用程序顶级中贡献Loginservice时,代码工作正常(当我在AppModule上提供LoginFirebaseHelper并通过LoginNetworkBuilderModule.lass将Loginservice贡献给应用程序组件时)但是,当我使用上面的代码时,我得到下一个哈巴狗

     Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<....core.network.service.LoginService>
android dependency-injection dagger-2 android-mvvm
1个回答
0
投票

您需要将为您的服务声明@@ ContributesAndroidInjector的模块安装到应用程序中。

然后只有dagger-support-framework才能找到LoginService的注射器工厂。

要了解,只需将LoginServiceBulderModule安装到应用程序组件中。

@Singleton
@Component(modules = {LoginServiceBulderModule.class}) // you need to install it here 
interface AppComponent {

}

而且我假设您的应用程序类实现了HasAndroidInjector。如果不遵循,请遵循https://www.dagger.dev上有关如何使用Dagger Support Android Framework的指导。

© www.soinside.com 2019 - 2024. All rights reserved.