/// <summary> /// The use deployment server. /// </summary> /// <param name="app"> /// The app. /// </param> /// <param name="options"> /// The options. /// </param> /// <param name="componentOptions"> /// The component options. /// </param> /// <returns> /// The <see cref="IAppBuilder"/>. /// </returns> public static IAppBuilder UseDeploymentServer( this IAppBuilder app, IDeploymentServerOptions options, IDscComponentOptions componentOptions) { return(UseDeploymentServer(app, "/api/v2", options, componentOptions)); }
/// <summary> /// The use node repository. /// </summary> /// <param name="app"> /// The app. /// </param> /// <param name="options"> /// The options. /// </param> /// <param name="componentOptions"> /// The component options. /// </param> /// <returns> /// The <see cref="IAppBuilder"/>. /// </returns> public static IAppBuilder UseNodeRepository( this IAppBuilder app, INodeRepositoryOptions options, IDscComponentOptions componentOptions) { return(UseNodeRepository(app, "/api/v2", options, componentOptions)); }
/// <summary> /// The use deployment server. /// </summary> /// <param name="app"> /// The app. /// </param> /// <param name="controllerPrefix"> /// The controller prefix. /// </param> /// <param name="options"> /// The options. /// </param> /// <param name="componentOptions"> /// The component options. /// </param> /// <returns> /// The <see cref="IAppBuilder"/>. /// </returns> public static IAppBuilder UseDeploymentServer( this IAppBuilder app, string controllerPrefix, IDeploymentServerOptions options, IDscComponentOptions componentOptions) { return(app.Map( controllerPrefix, builder => { var config = new HttpConfiguration(); // Set up DI var containerBuilder = RegisterTypes(options); var container = containerBuilder.Build(); config.DependencyResolver = new AutofacWebApiDependencyResolver(container); // Logging var optionsLogging = options.Logging ?? new DeploymentServerLogging(); var logging = container.IsRegistered <IDeploymentServerLogging>() ? container.Resolve <IDeploymentServerLogging>() : optionsLogging; // Initialize database MigrationsContextFactory.NameOrConnectionString = options.NameOrConnectionString; Database.SetInitializer(new DeploymentServerContextInitializer(logging)); var context = container.Resolve <DeploymentServerContext>(); context.Database.Initialize(true); context.Dispose(); // Configure HangFire DB GlobalConfiguration.Configuration.UseSqlServerStorage(options.NameOrConnectionString); // Configure HangFire GlobalConfiguration.Configuration.UseAutofacActivator(container); builder.UseHangfireServer( new BackgroundJobServerOptions { Queues = new[] { "mofbuilder", "default" }, WorkerCount = options.WorkerCount }); if (options.UseJobDashbaord) { app.UseHangfireDashboard(); } // Configure cleanup jobs SetupDbMaintenance(); // Set up filters config.Filters.Add(new AuthorizeAttribute()); config.MessageHandlers.Add(new UrlHelperHandler(container.ComponentRegistry)); if (componentOptions.UsePrettyHtmlOutput) { config.Formatters.Add(new JsonTextMediaFormatter()); } // Map routes and formatting config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; config.IncludeErrorDetailPolicy = componentOptions.ErrorDetailPolicy; config.MapHttpAttributeRoutes(); builder.UseAutofacMiddleware(container); builder.UseAutofacWebApi(config); builder.UseWebApi(config); })); }
/// <summary> /// The use node repository. /// </summary> /// <param name="app"> /// The app. /// </param> /// <param name="controllerPrefix"> /// The controller prefix. /// </param> /// <param name="options"> /// The options. /// </param> /// <param name="componentOptions"> /// The component options. /// </param> /// <returns> /// The <see cref="IAppBuilder"/>. /// </returns> public static IAppBuilder UseNodeRepository( this IAppBuilder app, string controllerPrefix, INodeRepositoryOptions options, IDscComponentOptions componentOptions) { return(app.Map( controllerPrefix, builder => { // Set up DI var containerBuilder = RegisterTypes(options); containerBuilder.RegisterApiControllers(Assembly.GetAssembly(typeof(IAppBuilderExtensions))); containerBuilder.RegisterType <ViewModelFactory>().AsImplementedInterfaces().SingleInstance(); // Register all ViewModels var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => a.FullName.StartsWith("Ticketmaster.")); foreach (var assembly in assemblies) { foreach ( var viewModel in assembly.GetTypes().Where(t => typeof(IViewModel).IsAssignableFrom(t))) { containerBuilder.RegisterType(viewModel).AsSelf().AsImplementedInterfaces(); } } containerBuilder.Register(c => new ViewModelFactory(c.Resolve <IComponentContext>())) .AsSelf() .AsImplementedInterfaces() .SingleInstance(); var container = containerBuilder.Build(); var config = new HttpConfiguration { DependencyResolver = new AutofacWebApiDependencyResolver(container) }; // Initialize database MigrationsContextFactory.NameOrConnectionString = options.NameOrConnectionString; var optionsLogging = options.Logging ?? new NodeRepositoryLogging(); var logging = container.IsRegistered <INodeRepositoryLogging>() ? container.Resolve <INodeRepositoryLogging>() : optionsLogging; Database.SetInitializer(new NodeRepositoryContextInitializer(logging)); var context = container.Resolve <NodeRepositoryContext>(); context.Database.Initialize(true); context.Dispose(); // Initialize ViewModelFactory container.Resolve <ViewModelFactory>(); // Set up filters config.Filters.Add(new AuthorizeAttribute()); config.MessageHandlers.Add(new UrlHelperHandler(container.ComponentRegistry)); // Map routes and formatting // config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; if (componentOptions.UsePrettyHtmlOutput) { config.Formatters.Add(new JsonTextMediaFormatter()); } config.IncludeErrorDetailPolicy = componentOptions.ErrorDetailPolicy; config.MapHttpAttributeRoutes(); builder.UseAutofacMiddleware(container); builder.UseAutofacWebApi(config); builder.UseWebApi(config); config.EnsureInitialized(); })); }