단검 2를 배우려면 애플리케이션을 다시 작성하기로 결정했지만 다음 문제에 대한 적절한 해결책을 찾지 못했습니다.단검 2 : 런타임에 제공된 종속성을 변경하는 방법
public interface Mode {
Object1 obj1();
//some other methods providing objects for app
}
과 두 가지 구현 : 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