Exemple #1
0
        public IObservable <IUrlResponse> GetResponse(IRoutingContext context)
        {
            Guard.ArgumentNotNull(context, "context");
            Guard.ArgumentIsType(context.Request, typeof(NavigationRequest), "context.Request");

            // we initialize a lazy observer that is initialized when subscribed too
            LazyRelayObservable <IUrlResponse> _relayObservable = null;

            _relayObservable = new LazyRelayObservable <IUrlResponse>((o) =>
            {
                // we get the response content, if it is empty we return
                Object _content = _responseResolver(context.ParsedParameters);
                if (_content == null)
                {
                    var _response = new NavigationResponse((NavigationRequest)context.Request,
                                                           ResponseStatus.UrlNotFound, _content, context.ParsedParameters);
                    o.OnNext(_response);

                    // need to specialize this exception
                    //_localObservable.OnError(new InvalidOperationException(string.Format(NO_PAGE_RESOLVED, context.Request.Url)));
                }
                else
                {
                    // we get the navigation response
                    var _response = new NavigationResponse((NavigationRequest)context.Request,
                                                           ResponseStatus.Success, _content, context.ParsedParameters);
                    _relayObservable.OnNext(_response);
                    _relayObservable.OnCompleted();
                }
            });

            // and return
            return(_relayObservable);
        }
Exemple #2
0
        //public SiteMap SiteMap
        //{
        //    get { return _siteMap; }
        //    set
        //    {
        //        if (_siteMap != null) throw new InvalidOperationException(SITEMAP_SET_ONCE);
        //        _siteMap = value;
        //    }
        //}

        #region ISiteMapProvider Members

        public IObservable <SiteMap> ResolveSiteMap()
        {
            var _observable = new LazyRelayObservable <SiteMap>((o) =>
            {
                o.OnNext(this.SiteMap);
                o.OnCompleted();
            });

            return(_observable);
        }
        public IObservable <IUrlResponse> GetResponse(IRoutingContext context)
        {
            Guard.ArgumentNotNull(context, "context");
            if (!typeof(NavigationRequest).IsAssignableFrom(context.Request.GetType()))
            {
                throw new InvalidOperationException(REQUEST_TYPE_REQUIRED);
            }

            // lazily create the observer
            var _relayObservable = new LazyRelayObservable <IUrlResponse>((s) =>
            {
                Object _content = null;
                try
                {
                    // we get the assembly, not assuming that if not specified we take the application's assembly
                    var _assemblyName = (!string.IsNullOrEmpty(_resourceAssemblyName)) ?
                                        _resourceAssemblyName : GetApplicationAssemblyName();

                    // and we try and load thew resource
                    var _streamResourceInfo = System.Windows.Application.GetResourceStream(
                        new Uri(string.Format(RESOURCE_PATH_FORMAT, _assemblyName, _resourcePath), UriKind.Relative));

                    // we load the content
                    _content = _resourceLoader(_streamResourceInfo.Stream);
                }
                catch (Exception ex)
                {
                    s.OnError(ex);
                    return;
                }

                if (_content == null)
                {
                    // todo: need to specialize this exception
                    s.OnError(new InvalidOperationException(string.Format(NO_PAGE_RESOLVED, context.Request.RequestUrl)));
                }
                else
                {
                    // we get the navigation response
                    var _response = new NavigationResponse((NavigationRequest)context.Request, ResponseStatus.Success, _content, context.ParsedParameters);

                    // and return and close
                    s.OnNext(_response);
                    s.OnCompleted();
                }
            });

            // and return
            return(_relayObservable);
        }
Exemple #4
0
        public IObservable <IUrlResponse> GetResponse(IRoutingContext context)
        {
            Guard.ArgumentNotNull(context, "context");
            Guard.ArgumentIsType(context.Request, typeof(ControllerActionRequest), "context.Request");

            var _relayObservable = new LazyRelayObservable <IUrlResponse>((s) =>
            {
                var _request    = (ControllerActionRequest)context.Request;
                var _controller = (IController)TypeBuilder.BuildType(_controllerType);
                var _response   = new ControllerContext(_request, ResponseStatus.Success, _controller, context.ParsedParameters);
                s.OnNext(_response);
                s.OnCompleted();
            });

            return(_relayObservable);
        }
        public IObservable <IUrlResponse> GetResponse(IRoutingContext context)
        {
            // we get the route handler from the resource locator
            IRouteHandler _routeHandler = null;

            if (!ResourceLocator.TryGetResource <IRouteHandler>(_url, out _routeHandler))
            {
                // we return that the handler was not found
                var _observer = new LazyRelayObservable <IUrlResponse>((s) =>
                {
                    s.OnNext(new UrlResponse(context.Request, ResponseStatus.HandlerNotFound, null, null));
                    s.OnCompleted();
                });
                return(_observer);
            }

            // we we resolve
            return(_routeHandler.GetResponse(context));
        }