public static IHostBuilder UseClaptrap(this IHostBuilder hostBuilder,
                                               Action <IClaptrapBootstrapperBuilder> builderAction,
                                               Action <ContainerBuilder>?containerBuilderAction = null)
        {
            return(hostBuilder
                   .ConfigureServices((context, collection) =>
            {
                var configSection =
                    context.Configuration.GetSection(ClaptrapServerOptions.ConfigurationSectionName);
                collection.Configure <ClaptrapServerOptions>(configSection);
            })
                   .UseServiceProviderFactory(context =>
            {
                var serviceProviderFactory = new AutofacServiceProviderFactory(
                    builder =>
                {
                    var collection = new ServiceCollection().AddLogging(logging =>
                    {
                        logging.SetMinimumLevel(LogLevel.Debug);
                    });
                    var buildServiceProvider = collection.BuildServiceProvider();
                    var loggerFactory = buildServiceProvider.GetService <ILoggerFactory>();
                    var bootstrapperBuilder = new AutofacClaptrapBootstrapperBuilder(loggerFactory, builder);
                    bootstrapperBuilder
                    .ScanClaptrapModule()
                    .AddConfiguration(context);
                    builderAction.Invoke(bootstrapperBuilder);
                    var claptrapBootstrapper = bootstrapperBuilder.Build();
                    claptrapBootstrapper.Boot();
                    containerBuilderAction?.Invoke(builder);
                });

                return serviceProviderFactory;
            }));
        }
        public void NothingAdded()
        {
            var serviceCollection    = new ServiceCollection().AddLogging(logging => logging.AddConsole());
            var buildServiceProvider = serviceCollection.BuildServiceProvider();
            var loggerFactory        = buildServiceProvider.GetRequiredService <ILoggerFactory>();

            using var mocker = AutoMockHelper.Create();
            var containerBuilder     = new ContainerBuilder();
            var builder              = new AutofacClaptrapBootstrapperBuilder(loggerFactory, containerBuilder);
            var claptrapBootstrapper = builder.Build();

            claptrapBootstrapper.Should().NotBeNull();
        }
        public void NothingAdded()
        {
            var serviceCollection = new ServiceCollection()
                                    .AddLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(LogLevel.Trace);
                logging.AddNLog();
            });
            var buildServiceProvider = serviceCollection.BuildServiceProvider();
            var loggerFactory        = buildServiceProvider.GetRequiredService <ILoggerFactory>();

            using var mocker = AutoMockHelper.Create();
            var containerBuilder = new ContainerBuilder();

            containerBuilder.Populate(serviceCollection);
            var builder = new AutofacClaptrapBootstrapperBuilder(loggerFactory, containerBuilder);
            var claptrapBootstrapper = builder.Build();

            claptrapBootstrapper.Should().NotBeNull();
        }
Exemple #4
0
        public static IHost BuildHost(
            DatabaseType databaseType,
            RelationLocatorStrategy strategy,
            IEnumerable <string> configJsonFilenames,
            Action <ContainerBuilder> builderAction = null,
            Action <IClaptrapBootstrapperBuilder> bootstrapperAction = null,
            Action <HostBuilder> configureHostBuilder = null)
        {
            var hostBuilder = new HostBuilder();

            hostBuilder
            .ConfigureAppConfiguration(configurationBuilder =>
            {
                configurationBuilder
                .AddJsonFile("configs/appsettings.json")
                .AddJsonFile($"configs/db_configs/claptrap.{databaseType:G}.json".ToLower())
                .AddJsonFile($"configs/db_configs/claptrap.{databaseType:G}.{strategy:G}.json".ToLower());
                foreach (var filename in configJsonFilenames)
                {
                    configurationBuilder.AddJsonFile(filename);
                }

                configurationBuilder.AddEnvironmentVariables();
            })
            .ConfigureServices(collection =>
            {
                collection.AddLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(LogLevel.Trace);
                    logging.AddNLog();
                });
            })
            .UseServiceProviderFactory(context =>
            {
                return(new AutofacServiceProviderFactory(builder =>
                {
                    var loggerFactory = new ServiceCollection()
                                        .AddLogging(logging =>
                    {
                        logging.SetMinimumLevel(LogLevel.Trace);
                        logging.AddConsole();
                    })
                                        .BuildServiceProvider()
                                        .GetRequiredService <ILoggerFactory>();
                    var claptrapBootstrapperBuilder = new AutofacClaptrapBootstrapperBuilder(loggerFactory)
                                                      .ScanClaptrapModule()
                                                      .AddConfiguration(context.Configuration)
                                                      .ScanClaptrapDesigns(new[]
                    {
                        typeof(IAccount),
                        typeof(Account),
                        typeof(IAccountBalanceMinion),
                        typeof(AccountBalanceMinion),
                        typeof(IAccountHistoryBalanceMinion),
                        typeof(AccountHistoryBalanceMinion)
                    })
                                                      .ConfigureClaptrapDesign(x =>
                                                                               x.ClaptrapOptions.EventCenterOptions.EventCenterType = EventCenterType.None);
                    bootstrapperAction?.Invoke(claptrapBootstrapperBuilder);
                    var claptrapBootstrapper =
                        (AutofacClaptrapBootstrapper)claptrapBootstrapperBuilder
                        .Build();
                    claptrapBootstrapper.Boot(builder);

                    builder.RegisterType <Account>()
                    .AsSelf()
                    .InstancePerDependency();
                    builder.RegisterType <AccountBalanceMinion>()
                    .AsSelf()
                    .InstancePerDependency();

                    builderAction?.Invoke(builder);
                }));
            })
            .ConfigureServices((_, collection) => { collection.AddClaptrapServerOptions(); });
            configureHostBuilder?.Invoke(hostBuilder);
            var host = hostBuilder.Build();

            return(host);
        }