示例#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);
        }