Android用Dagger2ライブラリでSingletonに問題があります。ディスパッチャを提供DispatcherModuleクラスが含まれてAndroid Dagger2、Singleton crossコンポーネント
DispatcherComponent: 私の問題は、私は2つのコンポーネントと2つのモジュールがイム@Singletonを使用しますが= 2つの異なるオブジェクトを取得[
です。 DispatcherはStoreModuleによって提供されるインスタンスUserStoreを必要とします。
@Singleton
@Component(modules={AppModule.class, StoreModule.class, DispatcherModule.class})
public interface DispatcherComponent {
void inject(SomeClass someClass);
}
と
@Module
public class DispatcherModule {
@Provides
@Singleton
public Dispatcher provideDispatcher(UserStore store) {
Log.d("DEBUG", "userStore : " + store.toString());
return new Dispatcher(store);
}
となりましStoreComponent.class
@Singleton
@Component(modules={AppModule.class, StoreModule.class})
public interface StoreComponent {
void inject(SomeOtherClass otherClass);
}
とStoreModule.class
今@Module
public class StoreModule {
@Provides
@Singleton
public UserStore provideUserStore() {
return new UserStore();
}
イムしようとして次のようにDispatcherModule.classがありますUserStoを挿入するイム再2つの異なるオブジェクト=/
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);
}
と最後を取得し、これは私がコンポーネントを作成する方法である:今
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();
}
、イムは、アプリケーションを実行するときに、私は2つの異なるオブジェクトを取得します!誰かが私を助けることができる?どのように私はそれを修正すべきですか?私は神の構成要素を持っていたいとは思っていません。
THanks!
感謝を!それは今働いています:)そのため、ちょうど明確にするために、同じコンポーネントを使用している場合、シングルトンは本当のシングルトンですか? – user3534500
実際のシングルトン(静的インスタンスではない)、コンポーネントインスタンスのメンバーだけでなく、コンポーネントがGCによって解放されると、ストアも解放され、userStoreが実際にコンポーネントによって保持されるためです。 – luffy