示例#1
0
        public Server(IUnityProvider unityProvider)
        {
            Startup.Unity = unityProvider;

            ITypeProvider <IHttpController> controllersProvider = new UnityTypeProvider <IHttpController>(unityProvider.Container);

            _initializer = new ControllerInitializer(unityProvider.Container, controllersProvider);
        }
示例#2
0
        public void Configuration(IAppBuilder app)
        {
            // Set logger factory.
            app.SetLoggerFactory(new Log4NetLoggerFactory(Assembly.GetExecutingAssembly()));

            ILogger logger = app.CreateLogger <Startup>();

            logger.WriteInformation("App is starting, building the http configuration");

            // Create the http configuration.
            HttpConfiguration config = new HttpConfiguration();

            // Ignore SignalR related routes.
            config.Routes.IgnoreRoute("signalr", "signalr/{*pathInfo}");

            // Attribute-based routing.
            config.MapHttpAttributeRoutes();

            // Convention-based routing.
            config.Routes.MapHttpRoute(name: "DefaultApi",
                                       routeTemplate: "api/{controller}/{action}/{id}",
                                       defaults: new
            {
                action = RouteParameter.Optional,
                id     = RouteParameter.Optional,
            });

            // Controllers type resolver.
            ITypeProvider <IHttpController> registeredControllers = new UnityTypeProvider <IHttpController>(Unity.Container);

            config.Services.Replace(typeof(IHttpControllerTypeResolver), new ControllerTypeResolver(registeredControllers));

            // Dependency resolver, hierarchical means one controller instance per-request.
            config.DependencyResolver = new UnityHierarchicalDependencyResolver(Unity.Container);

            // Pretty format for api messages.
            ConfigureJsonFormatter(config.Formatters.JsonFormatter);
            ConfigureXmlFormatter(config.Formatters.XmlFormatter);

            // Get Swagger parameters from unity config.
            string apiVersion = "v1";

            if (Unity.Container.IsRegistered <string>("ApiVersion"))
            {
                apiVersion = Unity.Container.Resolve <string>("ApiVersion");
            }

            // Create Swagger infos.
            string apiTitle = "API title";

            if (Unity.Container.IsRegistered <string>("ApiTitle"))
            {
                apiTitle = Unity.Container.Resolve <string>("ApiTitle");
            }

            string swaggerXmlComments = Assembly.GetExecutingAssembly().GetName().Name + ".xml";

            if (Unity.Container.IsRegistered <string>("SwaggerXmlComments"))
            {
                // If overridden in unity config.
                swaggerXmlComments = Unity.Container.Resolve <string>("SwaggerXmlComments");
            }

            if (!File.Exists(swaggerXmlComments))
            {
                throw new FileNotFoundException("The 'XML documentation file' does not exist, please check your project property '" + Assembly.GetExecutingAssembly().GetName().Name + "/Properties/Build/XML documentation file'", swaggerXmlComments);
            }

            // Expose the API methods as Swagger.
            config.EnableSwagger(c =>
            {
                c.SingleApiVersion(apiVersion, apiTitle);
                c.IncludeXmlComments(swaggerXmlComments);                      // See project "properties / Build / XML documentation file"
            })
            .EnableSwaggerUi(x => x.DisableValidator());

            // Add logging middleware.
            app.Use <LoggingMiddleware>();

            // Add other middlewares.
            ITypeProvider <OwinMiddleware> middlewares = new UnityTypeProvider <OwinMiddleware>(Unity.Container);

            foreach (Type middleware in middlewares.GetTypes())
            {
                app.Use(middleware);
            }

            // Allow cross-origin (cross-domain) resources.
            app.UseCors(CorsOptions.AllowAll);

            // We are using WebAPI.
            app.UseWebApi(config);

            // Perform final initialization of the config before it is used by incoming requests.
            config.EnsureInitialized();

            // Log end of configuration.
            logger.WriteInformation("App is started, configuration is done");
        }