我曾經注入當前活動或活動上下文的一些合作者共享注入父活動(BaseActivity或AppCompactActivity)的幾個活動。 但出於某種原因,我無法使用Dagger 2.11 Android Injector。如何使用Dagger注入當前活動的合作者2.11 Android注入器
這是我的活動模塊:
@Module
public class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides
@PerActivity
ActColaborator provideActCollaborator() {
return new ActColaborator();
}
@Provides
@PerActivity
Activity provideActivity() {
return activity;
}
}
我嘗試注入這些類:
@Inject
public Navigator(ActColaborator actColaborator,
BaseActivity activity) {
this.actColaborator = actColaborator;
this.activity = activity;
}
但我得到一個
BaseActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
如果我刪除BaseActivity東西,ActColaborator
正確注入。 問題是ActivityModule是不再實例化在傳遞活動本身的活動,因爲它使用的是:
//old, pre Android-injector code
this.activityComponent = getApplicationComponent()
.getActivityComponentBuilder()
.activityModule(new ActivityModule(this))
.build();
所以我不知道該怎樣做可以注入到其合作者當前活動的想法。
如要求提供更多資訊: 我有三個活動的三個不同的組件類,但所有的人都像這樣:
@PerActivity
@Subcomponent
public interface MainActivityComponent extends AndroidInjector<MainActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<MainActivity> {
}
}
而且ActivityBindingModule:
@Module(subcomponents = {
MainActivityComponent.class,
DetailActivityComponent.class,
AnotherActivityComponent.class
})
abstract public class ActivityBindingModule {
@Binds
@IntoMap
@ActivityKey(MainActivity.class)
abstract AndroidInjector.Factory<? extends Activity> mainActivityInjectorFactory(
MainActivityComponent.Builder builder);
.....
你能不能也發表您的組件類:
最後,我們可以在我們共同的合作者注入當前活動? – azizbekian
進一步調查後添加更多信息。在android之前的注入模式下,活動實例化了ActivityModule,使得將當前活動傳遞給它很容易。使用AndroidInjector這是不可能的,因爲ActivityModule沒有在我的應用程序代碼中實例化。 –