我有一个名为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>
您需要将为您的服务声明@@ 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的指导。