示例#1
0
 /// <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));
 }
示例#2
0
 /// <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));
 }
示例#3
0
        /// <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);
            }));
        }
示例#4
0
        /// <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();
            }));
        }