Dagger 2を学ぶために、私はアプリケーションを書き直すことにしましたが、以下の問題に対して適切な解決策を見つけることができません。Dagger 2:実行時に提供される依存関係を変更する方法
public interface Mode {
Object1 obj1();
//some other methods providing objects for app
}
と2つの実装: NormalMode
とDemoMode
この例の目的のために
は、我々はMode
と呼ばれるインターフェースを持っていると仮定しましょう。
モードはシングルトンで保存されるため、アプリケーション内のどこからでもアクセスできます。
public enum ModeManager {
INSTANCE,;
private Mode mode;
public Mode mode() {
if (mode == null)
mode = new NormalMode();
return mode;
}
public void mode(Mode mode) { //to switch modules at runtime
this.mode = mode;
}
}
NormalMode
は、実行時にDemoMode
に切り替えている(のは言わせ、とき時代の背景のカップルのユーザーclickcs)
public void backgroundClicked5Times(){
ModeManager.INSTANCE.mode(new DemoMode());
//from now on every object that uses Mode will get Demo implementations, great!
}
ので
最初、私はシングルトンを取り除くととモードを定義してしまいましたダガー2モジュール:
@Module
public class NormalModeModule {
@Provides
public Object1 provideObject1() {
return new NormalObject1();
}
}
@Module
public class DemoModeModule {
@Provides
public Object1 provideObject1() {
return new DemoObject1();
}
}
backgroundClicked5Times
シングルトンを扱う代わりにNormalModeModule
をDAGのDemoModeModule
に置き換えたいので、Object1
を必要とする他のクラスは今からDemoObject1
の実装を取得します。
ダガーでどうすればいいですか?
ありがとうございます。
ダガーと[スワップ可能なモジュールの可能な複製を2](https://stackoverflow.com/questions/35658488/swappable-modules-with-dagger-2) – tir38