void IInitializable.Initialize() { PreInitialize(); RequestEntity.OnLoadRequestAsObservable().Select(GetOrCreateSceneStrategy).Subscribe(((ILoaderUseCase)this).Load); RequestEntity.OnUnloadRequestAsObservable().Select(GetOrCreateSceneStrategy).Subscribe(((ILoaderUseCase)this).Unload); RequestHandlerPresenter.RequestLoadSceneAsObservable().Subscribe(RequestEntity.RequestLoad); RequestHandlerPresenter.RequestUnloadSceneAsObservable().Subscribe(RequestEntity.RequestUnload); SceneManager.sceneLoaded += (scene, loadSceneMode) => SceneStateEntity.DidLoadSubject.OnNext(scene.name); SceneManager.sceneUnloaded += (scene) => SceneStateEntity.DidUnloadSubject.OnNext(scene.name); GenerateInitialSceneStrategyList().Select(SceneEntityFactory.Create).ToList().ForEach(x => SceneEntityList.AddLast(x)); PostInitialize(); }