以下所有内容均与匕首2.10和dagger.android
包一起使用。多个@绑定返回类别相同但密钥不同
说我有一个班我想注入多个活动。
public class DemoSharedClass {
Activity activity;
@Inject public DemoSharedClass(Activity activity) {
this.activity = activity;
}
}
然后,使用最新的匕首的API,我的类被定义为
public class DemoActivity extends DaggerActivity {
@Inject DemoSharedClass demoSharedClass;
// ...
}
public class Demo2Activity extends DaggerActivity {
@Inject DemoSharedClass demoSharedClass;
// ...
}
每个活动都有它的模块和子定义为(exactement同为Demo2Activity
)
@Module(subcomponents = DemoActivitySubcomponent.class)
public abstract class DemoActivityModule {
@Binds
@IntoMap
@ActivityKey(DemoActivity.class)
abstract AndroidInjector.Factory<? extends Activity>
bindDemoActivityInjectorFactory(DemoActivitySubcomponent.Builder builder);
// This is set so SharedClass can be injected using its constructor
// There is the same in Demo2ActivityModule
@Binds abstract Activity bindActivity(DemoActivity demoActivity);
}
@Subcomponent
public interface DemoActivitySubcomponent extends AndroidInjector<DemoActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<DemoActivity> {}
}
最后,应用程序组件被定义为
@Component(modules = {
ApplicationModule.class,
AndroidInjectionModule.class,
DemoActivityModule.class,
Demo2ActivityModule.class,
})
interface DemoApplicationComponent {
DemoApplication injectApplication(DemoApplication application);
}
现在,我得到这个错误,当我生成项目:
Error:(11, 11) error: [dagger.android.AndroidInjector.inject(T)] android.app.Activity is bound multiple times:
@Binds android.app.Activity dagger.demo.DemoActivityModule.bindActivity(dagger.demo.DemoActivity)
@Binds android.app.Activity dagger.demo.Demo2ActivityModule.bindActivity(dagger.demo.Demo2Activity)
我的错误,我想这是因为他们在同一个范围内,应用程序组件。
我想过为两个DemoSubcomponents创建一个通用模块,它看上去像下面这样,但有类似的错误。
@Module
public abstract class SharedClassModule {
@Binds abstract Activity bindContext(DemoActivity demoActivity);
@Binds abstract Activity bindContext(Demo2Activity demo2Activity);
}
问题:我该怎么做?
您是在您的应用程序类或其他地方构建DemoApplicationComponent吗? – Avi