/// <summary>Registers all APIs into the ASP.net pipeline.</summary> /// <param name="application">The application to work with.</param> /// <returns>The application itself.</returns> public static HttpApplication RegisterApis(this HttpApplication application) { if (application == null) { throw new ArgumentNullException("application"); } lock (Lock) { var routes = new Dictionary <string, Route>(); var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IHttpServerConfiguration, HttpContextBoundServerConfiguration>(); container.WithAutodiscoveredControllers((controller, description) => { var routesToAdd = (IDictionary <string, Route>)RegisterApiT.MakeGenericMethod(controller).Invoke(null, new object[] { container, description }); routes.AddRange(routesToAdd.Where(route => !routes.ContainsKey(route.Key))); }); var namedGraphSelector = container.Resolve <INamedGraphSelector>() as ILocallyControlledNamedGraphSelector; if (namedGraphSelector != null) { namedGraphSelector.CurrentRequest = () => HttpContext.Current.Items["URSA.Http.RequestInfo"] as IRequestInfo; } routes.ForEach(route => RouteTable.Routes.Add(route.Key, route.Value)); } return(application); }
/// <summary>Registers automatically discovered <see cref="IController" /> implementations.</summary> /// <param name="container">The container.</param> /// <param name="controllerDetailsAction">The controller details action.</param> /// <returns>The <paramref name="container" /> itself.</returns> public static IComponentProvider WithAutodiscoveredControllers(this IComponentProvider container, Action <Type, ControllerInfo> controllerDetailsAction = null) { if (container == null) { throw new ArgumentNullException("container"); } var assemblies = UrsaConfigurationSection.GetInstallerAssemblies(); container.RegisterAll <IController>(assemblies); var controllers = container.ResolveAllTypes <IController>(); container.RegisterControllerRelatedTypes(controllers); var registeredEntryPoints = new List <string>(); foreach (var controller in controllers.Where(controller => !controller.IsDescriptionController())) { var descriptionBuilder = (IHttpControllerDescriptionBuilder)container.Resolve(typeof(IHttpControllerDescriptionBuilder <>).MakeGenericType(controller)); var description = descriptionBuilder.BuildDescriptor(); if ((description.EntryPoint != null) && (!registeredEntryPoints.Contains(description.EntryPoint.ToString()))) { container.RegisterEntryPointControllerDescriptionBuilder(description.EntryPoint.Url); registeredEntryPoints.Add(description.EntryPoint.ToString()); } if (controllerDetailsAction != null) { controllerDetailsAction(controller, description); } } return(container); }
private static IApiDocumentation GetApiDocumentation(HttpUrl url) { string contentType; var responseStream = new UnclosableStream(GetResponse(Method, url, out contentType)); var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IHttpServerConfiguration>(new StaticHttpServerConfiguration((Uri)url)); var headers = new HeaderCollection(); if (!String.IsNullOrEmpty(contentType)) { ((IDictionary <string, string>)headers)[Header.Accept] = contentType; ((IDictionary <string, string>)headers)[Header.ContentType] = contentType; } var apiDocumentationId = url.WithFragment(String.Empty); var httpRequest = new RequestInfo(Verb.Parse(Method), apiDocumentationId, responseStream, new BasicClaimBasedIdentity(), headers); var converterProvider = container.Resolve <IConverterProvider>(); var converter = converterProvider.FindBestInputConverter <IApiDocumentation>(httpRequest); if (converter == null) { throw new NotSupportedException(String.Format("Content type of '{0}' is not supported.", contentType)); } converter.ConvertTo <IApiDocumentation>(httpRequest); return(_container.Resolve <IEntityContext>().Load <IApiDocumentation>((Uri)apiDocumentationId)); }
/// <summary>Registers an identity provider.</summary> /// <typeparam name="T">Type of the identity provider to use.</typeparam> /// <param name="application">The application to work with.</param> /// <returns>The application itself.</returns> public static HttpApplication WithIdentityProvider <T>(this HttpApplication application) where T : IIdentityProvider { if (application == null) { throw new ArgumentNullException("application"); } var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IIdentityProvider, T>(lifestyle: Lifestyles.Singleton); return(application); }
/// <summary>Registers the Basic authentication mechanism and sets it as a default one.</summary> /// <param name="application">The application to work with.</param> /// <returns>The application itself.</returns> public static HttpApplication WithBasicAuthentication(this HttpApplication application) { if (application == null) { throw new ArgumentNullException("application"); } var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IPreRequestHandler, BasicAuthenticationProvider>("Basic", lifestyle: Lifestyles.Singleton); container.Register <IPostRequestHandler, BasicAuthenticationProvider>(lifestyle: Lifestyles.Singleton); return(application); }
private Client() { IComponentProvider container = UrsaConfigurationSection.InitializeComponentProvider(); _webRequestProvider = (from webRequestProvider in container.ResolveAll <IWebRequestProvider>() from supportedProtocol in webRequestProvider.SupportedProtocols join allowedProtocol in AllowedProtocols on supportedProtocol equals allowedProtocol select webRequestProvider).FirstOrDefault(); if (_webRequestProvider == null) { throw new InvalidOperationException("Cannot create an HTTP client without proper web request provider."); } _converterProvider = container.Resolve <IConverterProvider>(); _resultBinder = container.Resolve <IResultBinder <RequestInfo> >(); }
/// <summary>Registers the Cross-Origin Resource Sharing component to be used.</summary> /// <param name="application">The application to work with.</param> /// <param name="allowedOrigins">Allowed origins.</param> /// <param name="allowedHeaders">Allowed headers.</param> /// <param name="exposedHeaders">Exposed headers.</param> /// <returns>The application itself.</returns> public static HttpApplication WithCorsEnabled( this HttpApplication application, IEnumerable <string> allowedOrigins = null, IEnumerable <string> allowedHeaders = null, IEnumerable <string> exposedHeaders = null) { if (application == null) { throw new ArgumentNullException("application"); } var handler = new CorsPostRequestHandler( allowedOrigins ?? CorsPostRequestHandler.WithAny, allowedHeaders ?? CorsPostRequestHandler.WithAny, exposedHeaders ?? CorsPostRequestHandler.WithAny); var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IPostRequestHandler>("CORS", handler); return(application); }
private static void Process(string uri, string targetDirectory) { HttpUrl url; if (uri == null) { throw new ArgumentNullException("uri"); } if (uri.Length == 0) { throw new ArgumentOutOfRangeException("uri"); } if (targetDirectory == null) { throw new ArgumentNullException("targetDirectory"); } if (targetDirectory.Length == 0) { throw new ArgumentOutOfRangeException("targetDirectory"); } url = UrlParser.Parse(uri) as HttpUrl; if (url == null) { throw new ArgumentOutOfRangeException("uri"); } if (!Directory.Exists(targetDirectory)) { throw new ArgumentOutOfRangeException("targetDirectory"); } _container = UrsaConfigurationSection.InitializeComponentProvider(); CreateProxy(targetDirectory, url); }
/// <summary>Registers all APIs into the ASP.net pipeline.</summary> /// <param name="application">The application to work with.</param> public static IAppBuilder RegisterApis(this IAppBuilder application) { if (application == null) { throw new ArgumentNullException("application"); } lock (Lock) { var container = UrsaConfigurationSection.InitializeComponentProvider(); container.Register <IHttpServerConfiguration>(new LazyHttpServerConfiguration()); container.WithAutodiscoveredControllers(); var namedGraphSelector = container.Resolve <INamedGraphSelector>() as ILocallyControlledNamedGraphSelector; if (namedGraphSelector != null) { namedGraphSelector.CurrentRequest = () => System.Runtime.Remoting.Messaging.CallContext.HostContext as IRequestInfo; } application.Use(typeof(UrsaHandler), container.Resolve <IRequestHandler <RequestInfo, ResponseInfo> >()); } return(application); }
/// <inheritdoc /> public void Install(IWindsorContainer container, IConfigurationStore store) { UrlParser.Register <HttpUrlParser>(); UrlParser.Register <FtpUrlParser>(); WindsorComponentProvider componentProvider = container.Resolve <WindsorComponentProvider>(); var configuration = (HttpConfigurationSection)ConfigurationManager.GetSection(HttpConfigurationSection.ConfigurationSection); Type sourceSelectorType = ((configuration != null) && (configuration.DefaultValueRelationSelectorType != null) ? configuration.DefaultValueRelationSelectorType : typeof(DefaultValueRelationSelector)); container.AddFacility <TypedFactoryFacility>(); var typedFactory = new UrsaCustomTypedFactory(); container.Register(Component.For <IControllerActivator>().UsingFactoryMethod((kernel, context) => new DefaultControllerActivator(UrsaConfigurationSection.InitializeComponentProvider())).LifestyleSingleton()); container.Register(Component.For <ITripleStore>().Instance(_tripleStore.Value).Named("InMemoryTripleStore").LifestyleSingleton()); container.Register(Component.For <INamedGraphSelectorFactory>().AsFactory(typedFactory).LifestyleSingleton()); container.Register(Component.For <INamedGraphSelector>().ImplementedBy <LocallyControlledOwningResourceNamedGraphSelector>() .Forward <ILocallyControlledNamedGraphSelector>().Named("InMemoryNamedGraphSelector").LifestyleSingleton() .PropertiesIgnore((model, property) => property == typeof(LocallyControlledOwningResourceNamedGraphSelector).GetProperty("CurrentRequest"))); container.Register(Component.For <IEntityContextFactory>().Instance(_entityContextFactory.Value).Named("InMemoryEntityContextFactory").LifestyleSingleton()); container.Register(Component.For <IEntityContext>().UsingFactoryMethod(CreateEntityContext).Named("InMemoryEntityContext").LifeStyle.HybridPerWebRequestPerThread()); container.Register(Component.For <IEntityContextProvider>().AsFactory(typedFactory).LifestyleSingleton()); container.Register(Component.For <IDefaultValueRelationSelector>().ImplementedBy(sourceSelectorType).LifestyleSingleton()); container.Register(Component.For(typeof(DescriptionController <>)).Forward <IController>() .ImplementedBy(typeof(DescriptionController <>), componentProvider.GenericImplementationMatchingStrategy).LifestyleTransient()); container.Register(Component.For <EntryPointDescriptionController>().Forward <IController>().ImplementedBy <EntryPointDescriptionController>().LifestyleTransient()); container.Register(Component.For <IParameterSourceArgumentBinder>().ImplementedBy <FromQueryStringArgumentBinder>().Activator <NonPublicComponentActivator>().LifestyleSingleton()); container.Register(Component.For <IParameterSourceArgumentBinder>().ImplementedBy <FromUrlArgumentBinder>().Activator <NonPublicComponentActivator>().LifestyleSingleton()); container.Register(Component.For <IParameterSourceArgumentBinder>().ImplementedBy <FromBodyArgumentBinder>().Activator <NonPublicComponentActivator>().LifestyleSingleton()); container.Register(Component.For <IClassGenerator>().ImplementedBy <HydraClassGenerator>().LifestyleSingleton()); container.Register(Component.For <IUriParser>().ImplementedBy <Web.Http.Description.CodeGen.GenericUriParser>().LifestyleSingleton()); container.Register(Component.For <IUriParser>().ImplementedBy <HydraUriParser>().LifestyleSingleton().Named(typeof(HydraUriParser).FullName)); container.Register(Component.For <IUriParser>().ImplementedBy <XsdUriParser>().LifestyleSingleton().Named(typeof(XsdUriParser).FullName)); container.Register(Component.For <IUriParser>().ImplementedBy <OGuidUriParser>().LifestyleSingleton().Named(typeof(OGuidUriParser).FullName)); container.Register(Component.For <IXmlDocProvider>().ImplementedBy <XmlDocProvider>().LifestyleSingleton()); container.Register(Component.For <IWebRequestProvider>().ImplementedBy <WebRequestProvider>().LifestyleSingleton()); container.Register(Component.For <IRequestHandler <RequestInfo, ResponseInfo> >().ImplementedBy <RequestHandler>().LifestyleSingleton()); container.Register(Component.For <IResponseComposer>().ImplementedBy <ResponseComposer>().LifestyleSingleton()); container.Register(Component.For <IDelegateMapper <RequestInfo> >().ImplementedBy <DelegateMapper>().LifestyleSingleton()); container.Register(Component.For <IArgumentBinder <RequestInfo> >().ImplementedBy <ArgumentBinder>().LifestyleSingleton()); container.Register(Component.For <IResultBinder <RequestInfo> >().ImplementedBy <ResultBinder>().LifestyleSingleton()); container.Register(Component.For <ITypeDescriptionBuilder>().ImplementedBy <HydraCompliantTypeDescriptionBuilder>() .Named(EntityConverter.Hydra.ToString()).IsDefault().LifestyleSingleton()); container.Register(Component.For <IServerBehaviorAttributeVisitor>().ImplementedBy <DescriptionBuildingServerBahaviorAttributeVisitor <ParameterInfo> >().Named("Hydra")); container.Register(Component.For(typeof(IApiDescriptionBuilder <>)).ImplementedBy(typeof(ApiDescriptionBuilder <>)).LifestyleSingleton().Forward <IApiDescriptionBuilder>()); container.Register(Component.For <IApiEntryPointDescriptionBuilder>().ImplementedBy <ApiEntryPointDescriptionBuilder>().LifestyleSingleton().Forward <IApiDescriptionBuilder>()); container.Register(Component.For <IApiDescriptionBuilderFactory>().AsFactory(typedFactory).LifestyleSingleton()); container.Register(Component.For <IModelTransformer>().ImplementedBy <CollectionModelTransformer>().LifestyleSingleton()); }