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); }
//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); }
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)); }