Hançer 2'yi öğrenmek için başvurumu yeniden yazmaya karar verdim, ancak aşağıdaki sorun için uygun çözümü bulmaya çalışıyorum.Hançer 2: çalışma zamanında sağlanan bağımlılıkları nasıl değiştirilir?
public interface Mode {
Object1 obj1();
//some other methods providing objects for app
}
ve iki uygulamaları: NormalMode
ve DemoMode
Bu örneğin amacı en biz Mode
adlı bir arayüze sahip varsayalım için
Mod tekil olarak kaydedilir, böylece uygulama içindeki herhangi bir yerden erişilebilir.
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
zamanında DemoMode
geçer (diyelim ki, ne zaman kere arka plan çift kullanıcı clickcs)
public void backgroundClicked5Times(){
ModeManager.INSTANCE.mode(new DemoMode());
//from now on every object that uses Mode will get Demo implementations, great!
}
Yani
ilk ben tekiz kurtulmak ve sıra Modlar tanımlanmış var Hançer 2 modülleri:
@Module
public class NormalModeModule {
@Provides
public Object1 provideObject1() {
return new NormalObject1();
}
}
@Module
public class DemoModeModule {
@Provides
public Object1 provideObject1() {
return new DemoObject1();
}
}
Artık backgroundClicked5Times
yönteminde singleton ile uğraşmak yerine 'u DemoModeModule
DAG ile değiştirmek istiyorum, bu yüzden Object1
'a ihtiyaç duyan diğer sınıflar artık bir DemoObject1
uygulamasına sahip olacaklar.
Bunu Hançer'de nasıl yapabilirim?
Şimdiden teşekkürler.
Olası yinelenen 2] (https://stackoverflow.com/questions/35658488/swappable-modules-with-dagger-2) – tir38