コード例 #1
0
        private void Show(Type idType, string instanceId, object parameter, bool isPopup)
        {
            var        key = new NamedType(idType, instanceId);
            ScreenHost host;

            if (_screens.TryGetValue(key, out host))
            {
                host.BringToFront(isPopup);
                return;
            }

            ScreenFactory factory;

            if (!_factories.TryGetValue(key.Type, out factory))
            {
                return;
            }

            IScreen   logic;
            TBaseView view;
            Exception e;

            if (!factory.TryCreate(instanceId, parameter, out logic, out view, out e))
            {
                OnException(string.Format("Unable to create screen: {0}", key), e);
                return;
            }

            host = new ScreenHost(key, view, logic, CreateScreen, CreatePopup, factory.PopupAttribute);
            _screens.Add(key, host);
            host.Closed += OnHostClosed;

            var setupable = logic as IInternalScreen;

            if (setupable != null)
            {
                setupable.Setup(host.Close);
            }

            if (!host.Restore(_persistenceService, out e))
            {
                OnException(string.Format("Unable to restore screen: {0}", key), e);
            }

            host.Show(isPopup);
        }
コード例 #2
0
        private ScreenHost CreateScreenHost(Type idType, string instanceId, Func <IInternalScreen, object> getParameter, bool isPopup, PopupAttribute popupAttribute = null)
        {
            var key = new NamedType(idType, instanceId);

            if (_screens.TryGetValue(key, out var host))
            {
                host.BringToFront(isPopup);
                return(null);
            }

            if (!_factories.TryGetValue(key.Type, out var factory))
            {
                return(null);
            }

            if (!factory.TryCreate(instanceId, getParameter, out var logic, out var view, out var e))
            {
                OnException($"Unable to create screen: {key}", e);
                return(null);
            }

            popupAttribute = popupAttribute ?? factory.PopupAttribute;
            host           = new ScreenHost(key, view, logic, CreateScreen, ShowScreen, CreatePopup, ShowPopup, popupAttribute);
            _screens.Add(key, host);
            host.Closed += OnHostClosed;

            if (logic is IInternalScreen internalScreen)
            {
                internalScreen.Setup(host.Close);
            }

            if (!host.Restore(_persistenceService, out e))
            {
                OnException($"Unable to restore screen: {key}", e);
            }

            return(host);
        }