【发布时间】:2023-03-03 23:34:01
【问题描述】:
我有一个小场景,我有以下结构,我试图在 baseActivity Fragment 中注入片段管理器,但由于某种原因我运气不好:(
@Singleton
@Component(modules = { AppModule.class,
ActivityModule.class,
AndroidSupportInjectionModule.class })
public interface AppComponent extends AndroidInjector<App> {
@Override
void inject(App application);
@Component.Builder interface Builder {
@BindsInstance
AppComponent.Builder application(App application);
AppComponent build();
}
}
ActivityModule.class
@PerActivity
@ContributesAndroidInjector(modules = BaseActivityModule.class)
abstract BaseActivity baseActivity();
BaseActivityModule.class
static final String ACTIVITY_FRAGMENT_MANAGER = "ACTIVITY_FRAGMENT_MANAGER";
@PerActivity
@Named(ACTIVITY_FRAGMENT_MANAGER)
@Provides
static FragmentManager activityFragmentManager(BaseActivity activity) {
return activity.getSupportFragmentManager();
}
BaseAcitivity.class
public abstract class BaseActivity extends DaggerAppCompatActivity {
@Named(ACTIVITY_FRAGMENT_MANAGER)
@Inject
FragmentManager fragmentManager;
}
因此,即使我在 BaseActivityModule.class 中提供我的片段管理器,匕首也会引发以下错误。我什至尝试只使用 Activity 而不是 BaseActivity 作为 BaseActivityModule 中的输入参数。即便如此,我也遇到了同样的问题。不知道我到底在搞砸什么。所以任何帮助表示赞赏。在此先感谢:)
Error:(17, 8) error: [dagger.android.AndroidInjector.inject(T)] @javax.inject.Named("ACTIVITY_FRAGMENT_MANAGER") android.support.v4.app.FragmentManager cannot be provided without an @Provides- or @Produces-annotated method.
@javax.inject.Named("ACTIVITY_FRAGMENT_MANAGER") android.support.v4.app.FragmentManager is injected at
com.abc.views.base.BaseActivity.fragmentManager
com.abc.views.def.ABCActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
A binding with matching key exists in component: om.abc.views.base.BaseActivity_BaseActivity.BaseActivitySubcomponent
【问题讨论】:
-
您如何/注射什么?我猜您正在使用除单个 BaseActivity 之外的其他活动。您必须提供来自其组件的依赖项,BaseActivity 会被忽略
标签: android dependency-injection dagger-2 dagger