Ich habe ein Problem mit Singleton mit der Dagger2-Bibliothek für Android. Mein Problem ist, im die @Singleton aber immer zwei verschiedene Objekte = [Android Dagger2, Singleton Kreuz Komponente
Ich habe 2-Komponenten und 2 Module mit:
DispatcherComponent die die DispatcherModule Klasse umfasst, die einen Dispatcher zur Verfügung stellt. Der Dispatcher benötigt die Instanz UserStore, die von StoreModule bereitgestellt wird.
@Singleton
@Component(modules={AppModule.class, StoreModule.class, DispatcherModule.class})
public interface DispatcherComponent {
void inject(SomeClass someClass);
}
und die DispatcherModule.class ist als
@Module
public class DispatcherModule {
@Provides
@Singleton
public Dispatcher provideDispatcher(UserStore store) {
Log.d("DEBUG", "userStore : " + store.toString());
return new Dispatcher(store);
}
folgt und jetzt die StoreComponent.class
@Singleton
@Component(modules={AppModule.class, StoreModule.class})
public interface StoreComponent {
void inject(SomeOtherClass otherClass);
}
und StoreModule.class
@Module
public class StoreModule {
@Provides
@Singleton
public UserStore provideUserStore() {
return new UserStore();
}
jetzt, wenn im Versuch, um UserSto zu injizieren Re_Im zwei verschiedene Objekte bekommen =/
public class SomeOtherClass extends Acitivity {
@Inject UserStore mStore;
public void onCreate(Bundle savedInstance) {
StoreComponent comp = ((MyApp) getApplication).getStoreComponent();
comp.inject(this);
Log.d("DEBUG", "userStore2 :" + mStore.toString());
}
}
public class SomeClass {
@Inject Dispatcher mDispatcher;
public SomeClass (Application application) {
((MyApp) application).getDispatcherComponent().inject(this);
}
und letzte, das ist, wie ich die Komponenten erstellen:
public class MyApp extends Application {
public void onCreate() {
StoreModule store = new StoreModule();
StoreComponent storeComponent = DaggerStoreComponent.builder().appModule(new AppModule(this)).storeModule(storeModule).build();
DispatcherComponent disComp = DaggerDispatcherComponent.builder().appModule(new AppModule(this)).storeModule(storeModule).dispatcherModule(new DispatcherModule()).build();
}
jetzt, wenn im die Anwendung läuft, bekomme ich zwei verschiedene Objekte! kann mir jemand helfen ? Wie sollte ich es beheben? ich will nicht eine Gottkomponente haben.
THanks!
Danke:
Für diesen Fall können Sie StoreModule wie unten ändern! es funktioniert jetzt :) also nur um klar zu sein, Singleton ist nur echte Singleton wenn ich die gleiche Komponente richtig benutze? – user3534500
Nicht der echte Singleton (sagte, dass es keine statische Instanz ist), nur das Mitglied der Komponenteninstanz, sobald die Komponente von GC freigegeben wird, wird auch der Speicher freigegeben, weil der userStore tatsächlich von der Komponente gehalten wird. – luffy