コード例 #1
0
        public static IBareBonesBuilder AddMessageOutbox(this IBareBonesBuilder builder, Action <IMessageOutboxBuilder> outboxConfigurar, string sectionName = SectionName)
        {
            if (string.IsNullOrWhiteSpace(sectionName))
            {
                sectionName = SectionName;
            }

            builder.RegisterModule <OutboxModule>();

            var options = builder.Configuration.GetOptions <OutboxOptions>(sectionName);

            builder.Services.AddSingleton(options);
            var outboxBuilder = new MessageOutboxBuilder(builder, options);

            if (outboxConfigurar is null)
            {
                outboxBuilder.AddInMemory();
            }
            else
            {
                outboxConfigurar(outboxBuilder);
            }

            if (!options.Enabled)
            {
                return(builder);
            }

            builder.Services.AddHostedService <OutboxHostedService>();


            return(builder);
        }
コード例 #2
0
        public static IBareBonesBuilder AddOrderingDbContext(this IBareBonesBuilder builder, IConfiguration configuration)
        {
            return(builder.AddDbContext <OrderingDbContext>(entityFramework =>
            {
                entityFramework
                .UseOptions(options =>
                {
                    options.UseSqlServer(configuration.GetConnectionString("OrderingDb"),
                                         sqlOptions =>
                    {
                        sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name);
                        sqlOptions.EnableRetryOnFailure(maxRetryCount: 15, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
                    });
                })
                .AddMigrator()
                .AddDataSeeder <OrderingDbDataSeeder>()
                .AddDataSeeder <OrderingDbDataSeeder>(seeder =>
                {
                    seeder.AddDbDataProvider <IEnumerable <OrderStatus>, PredefinedOrderStatusDataProvider>();

                    if (configuration.GetValue <bool>("DataSeeding:UseCustomizationData"))
                    {
                        seeder.AddDbDataProvider(new JsonLineFileDbDataProvider <CardType>(Path.Combine("Data", "CardTypes.json")));
                    }
                    else
                    {
                        seeder.AddDbDataProvider <IEnumerable <CardType>, PredefinedCardTypeDataProvider>();
                    }
                });
            }));
        }
コード例 #3
0
ファイル: Extensions.cs プロジェクト: ali-tayebi/BareBones
        public static TModel GetOptions <TModel>(this IBareBonesBuilder builder, string settingsSectionName)
            where TModel : new()
        {
            using var serviceProvider = builder.Services.BuildServiceProvider();
            var configuration = serviceProvider.GetService <IConfiguration>();

            return(configuration.GetOptions <TModel>(settingsSectionName));
        }
コード例 #4
0
        public static IBareBonesBuilder AddDbContext <TDbContext>(this IBareBonesBuilder builder,
                                                                  Action <BareBonesEntityFrameworkBuilder <TDbContext> > action) where TDbContext : DbContext
        {
            var efBuilder = new BareBonesEntityFrameworkBuilder <TDbContext>(builder);

            action?.Invoke(efBuilder);
            return(builder);
        }
コード例 #5
0
        public static IBareBonesBuilder AddCommandGateway(this IBareBonesBuilder builder,
                                                          Action <ICommandGatewayBuilder> gateway)
        {
            builder.Services.AddSingleton <ICommandGateway, CommandGateway>();
            builder.Services.AddScoped <ICommandGatewayFiltersExecutor, CommandGatewayFiltersExecutor>();

            var gatewayBuilder = new CommandGatewayBuilder(builder);

            gateway?.Invoke(gatewayBuilder);

            builder.Services.AddSingleton <ICommandGatewayBuilder>(gatewayBuilder);
            return(builder.RegisterModule <ICommandGateway>());
        }
コード例 #6
0
        public static IBareBonesBuilder AddCommandDispatcher(this IBareBonesBuilder builder,
                                                             Action <ICommandDispatcherBuilder> dispatcher)
        {
            builder.Services.AddSingleton <ICommandDispatcher, CommandDispatcher>();
            builder.Services.AddScoped <IDispatchFiltersExecutor, DispatchFiltersExecutor>();

            var commandDispatcherBuilder = new CommandDispatcherBuilder(builder);

            commandDispatcherBuilder.AddInProcessDispatcher();

            dispatcher?.Invoke(commandDispatcherBuilder);

            builder.Services.AddSingleton <ICommandDispatcherBuilder>(commandDispatcherBuilder);
            return(builder.RegisterModule <ICommandDispatcher>());
        }
コード例 #7
0
        public static IBareBonesBuilder AddQueryGateway(this IBareBonesBuilder builder)
        {
            builder.Services.AddSingleton <IQueryGateway, QueryGateway>();

            builder.Services.Scan(selector =>
                                  selector.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies())
                                  .AddClasses(c => c.AssignableTo(typeof(IQueryHandler <,>)))
                                  .AsImplementedInterfaces()
                                  .WithTransientLifetime()
                                  .AddClasses(c => c.AssignableTo(typeof(IQueryHandlerFilter)))
                                  .AsImplementedInterfaces()
                                  .WithTransientLifetime());

            return(builder.RegisterModule <IQueryGateway>());
        }
コード例 #8
0
 public MessageOutboxBuilder(IBareBonesBuilder builder, OutboxOptions options)
 {
     Builder = builder;
     Options = options;
 }
コード例 #9
0
 public CommandGatewayBuilder(IBareBonesBuilder builder)
 {
     _builder = builder;
 }
コード例 #10
0
 public CommandDispatcherBuilder(IBareBonesBuilder builder)
 {
     _builder = builder;
 }
コード例 #11
0
 public DataSeederBuilder(IBareBonesBuilder builder)
 {
     _builder = builder;
 }
コード例 #12
0
 public BareBonesEntityFrameworkBuilder(IBareBonesBuilder builder)
 {
     _builder = builder;
 }