Example #1
0
        /// <summary>
        /// The register types.
        /// </summary>
        /// <param name="options">
        /// The options.
        /// </param>
        /// <returns>
        /// The <see cref="ContainerBuilder"/>.
        /// </returns>
        public static ContainerBuilder RegisterTypes(INodeRepositoryOptions options)
        {
            var containerBuilder = new ContainerBuilder();

            RegisterTypes(options, containerBuilder);
            return(containerBuilder);
        }
Example #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));
 }
Example #3
0
        /// <summary>
        /// The register types.
        /// </summary>
        /// <param name="options">
        /// The options.
        /// </param>
        /// <param name="containerBuilder">
        /// The container builder.
        /// </param>
        public static void RegisterTypes(INodeRepositoryOptions options, ContainerBuilder containerBuilder)
        {
            // Infrastructure
            if (options.Logging != null)
            {
                containerBuilder.RegisterInstance(options.Logging).AsImplementedInterfaces();
            }

            containerBuilder.RegisterInstance(options).AsImplementedInterfaces();
            containerBuilder.RegisterType <NodeRepositoryContextInitializer>().AsSelf().AsImplementedInterfaces();

            // Services
            containerBuilder.Register(c => new NodeRepositoryContext(options.NameOrConnectionString))
            .As <NodeRepositoryContext>();

            containerBuilder.Register(
                c =>
                new NodeConfigurationService(c.Resolve <NodeRepositoryContext>(), c.Resolve <INodeRepositoryLogging>())
            {
                BuildService
                    =
                        c.IsRegistered <IMofBuilderService>() ?
                        c
                        .Resolve
                        <
                            IMofBuilderService
                        >
                        (
                        ) : null
            })
            .AsImplementedInterfaces().AsSelf();

            containerBuilder.Register(
                c =>
                new ConfigurationPropertiesController(
                    c.Resolve <NodeRepositoryContext>(),
                    c.Resolve <INodeConfigurationService>(),
                    c.Resolve <INodeRepositoryLogging>())
            {
                BuildService =
                    c.IsRegistered <IMofBuilderService>()
                                ? c.Resolve <IMofBuilderService>()
                                : null
            }).AsImplementedInterfaces().AsSelf().As <ApiController>();
        }
Example #4
0
 /// <summary>
 /// The configure dependency injection.
 /// </summary>
 /// <param name="containerBuilder">
 /// The container builder.
 /// </param>
 /// <param name="options">
 /// The options.
 /// </param>
 public static void RegisterNodeRepositoryTypes(
     this ContainerBuilder containerBuilder,
     INodeRepositoryOptions options)
 {
     RegisterTypes(options, containerBuilder);
 }
Example #5
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();
            }));
        }