以下はすべて、ダガー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;
// ...
}
のように定義されている各アクティビティは、そのモジュールおよびサブコンポーネントとして定義します(Demo2Activity
のために同じことをexactement)
@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> {}
}
を持っています最後に、appコンポーネントは、
@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