У меня есть BaseActivity, которая расширяется несколькими действиями.У меня есть требование внедрить объект (InputProvider.java) в BaseActivity, но это не требуется в его дочерних действиях.
@Subcomponent
public interface BaseActivityInjector extends AndroidInjector<BaseActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<BaseActivity> {}
}
@Module(
includes = {
AppModule.class,
AndroidSupportInjectionModule.class,
InitializerModule.class},
subcomponents = {
BaseActivityInjector.class
})
public abstract class AppInjectionModule {
@Binds
@IntoMap
@ActivityKey(BaseActivity.class)
abstract AndroidInjector.Factory<? extends Activity> bindBaseActivityInjectorFactory(BaseActivityInjector.Builder builder);
}
@Module
public class InitializerModule {
@Provides
public InputProvider getInputProvider() {
return new InputProviderImpl();
}
}
public abstract class BaseActivity extends FragmentActivity {
@Inject
InputProvider inputProvider;
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
}
}
После запуска приложения оно вылетает на самом первом экране (заставка), который также расширяет BaseActivity, со следующим сообщением:
Невозможно запустить действие ComponentInfo {com.app.mobile.android.dev/com.app.mobile.android.SplashScreen}: java.lang.IllegalArgumentException: фабрика инжекторов не привязана к классу.Заводы по производству инжекторов были связаны с супертипами com.delta.mobile.android.SplashScreen: [com.app.mobile.android.uikit.view.BaseActivity].Вы хотели связать фабрику инжекторов для подтипа?
Журнал ошибок указывает на AndroidInjection.inject(this);
в BaseActivity через SplashScreen.