// TODO: Rewrite this whole logic so that all these dependencies are created PER PAGE when it opens, and are disposed when the page closes.
    public WorldScreenStateManager(
        ITyperPool typerPool,
        IConnectionManager connectionManager,
        WorldScreenState state,
        ILocationsClient locationsClient)
    {
        _characterId     = connectionManager.CharacterId;
        _typerPool       = typerPool;
        _locationsClient = locationsClient;

        connectionManager.WorldStateObservable.Subscribe(state =>
        {
            if (state == null)
            {
                return; // TODO: Show loading screen?
            }
            lock (_updateStateLock)
            {
                UpdateState(state);
            }
        });

        _currentState = state;
        _stateSubject = new BehaviorSubject <WorldScreenState>(_currentState);
    }
 public WorldInputHandler(
     ITyperPool typerPool,
     ComponentPool componentPool,
     WorldScreenState state,
     IScreenNavigation screenNavigation,
     IConnectionManager connectionManager) : base(typerPool, componentPool)
 {
     _screenNavigation  = screenNavigation;
     _connectionManager = connectionManager;
     _state             = state;
 }