public static IWrapperizerBuilder AddConsul(this IWrapperizerBuilder builder,
                                                    Action <ConsulClientConfiguration> configurator)
        {
            var services = builder.ServiceCollection;

            services.AddSingleton <IConsulClient, ConsulClient>(p => new ConsulClient(configurator));
            return(builder);
        }
        public static IWrapperizerBuilder AddUnitOfWork <T>(this IWrapperizerBuilder wrapperizerBuilder,
                                                            ServiceLifetime serviceLifetime = ServiceLifetime.Scoped)
            where T : IUnitOfWork
        {
            wrapperizerBuilder.ServiceCollection.Add(
                new ServiceDescriptor(
                    typeof(IUnitOfWork), provider => provider.GetRequiredService <T>(),
                    serviceLifetime));

            return(wrapperizerBuilder);
        }
        public static IWrapperizerBuilder AddCrudRepositories <TU>
            (this IWrapperizerBuilder wrapperizerServiceCollection,
            Action <IServiceProvider, DbContextOptionsBuilder> optionsAction,
            ServiceLifetime serviceLifetime = ServiceLifetime.Scoped)
            where TU : DbContext
        {
            wrapperizerServiceCollection.ServiceCollection
            .AddDbContext <DbContext, TU>(optionsAction ?? throw new ArgumentNullException(nameof(optionsAction)));

            wrapperizerServiceCollection.ServiceCollection.Add(
                new ServiceDescriptor(typeof(ICrudRepository <>), typeof(EfCoreCrudRepository <>),
                                      serviceLifetime));

            return(wrapperizerServiceCollection);
        }
Esempio n. 4
0
        public static IServiceCollection AddMessageRelayServices(
            this IWrapperizerBuilder builder,
            Action <DbContextOptionsBuilder> optionsBuilder)
        {
            if (_outboxServicesEnabled)
            {
                throw new InvalidOperationException(InvalidOperationExceptionMessage);
            }

            builder.ServiceCollection.AddDbContext <OutboxEventContext>(optionsBuilder, Singleton, Singleton);
            builder.ServiceCollection.AddSingleton <IOutboxEventService, OutboxEventService>();
            builder.ServiceCollection.AddSingleton <IOutboxMessageRelay, OutboxMessageRelay>();

            return(builder.ServiceCollection);
        }
Esempio n. 5
0
        public static IWrapperizerBuilder AddRepositories(this IWrapperizerBuilder wrapperizerBuilder,
                                                          ServiceLifetime lifetime = ServiceLifetime.Scoped)
        {
            var repositories = GetRepositoryTypes();
            var services     = wrapperizerBuilder.ServiceCollection;

            repositories.ForEach(definition =>
            {
                services.AddScoped(definition.Implementation);
                definition.Interfaces.ForEach(@interface =>
                {
                    services.AddScoped(@interface,
                                       provider => provider.GetRequiredService(definition.Implementation));
                });
            });

            return(wrapperizerBuilder);
        }
Esempio n. 6
0
        public static IServiceCollection AddOutboxServices(
            this IWrapperizerBuilder builder,
            Action <DbContextOptionsBuilder> optionsBuilder, Action <TransactionalOutboxConfiguration> configure = null,
            bool enableAutoMigration = true)
        {
            if (_messageRelayServicesEnabled)
            {
                throw new InvalidOperationException(InvalidOperationExceptionMessage);
            }

            var configuration = new TransactionalOutboxConfiguration {
                AutoPublish = false
            };

            configure?.Invoke(configuration);

            builder.ServiceCollection.AddSingleton(configuration);

            builder.ServiceCollection.AddDbContext <OutboxEventContext>(optionsBuilder);

            builder.ServiceCollection.AddTransient <Func <DbConnection, IOutboxEventService> >(
                sp => dbConnection =>
                // this dbConnection will be passed on
                // later on from implementations of integration service
            {
                var outboxEventContext = new OutboxEventContext(
                    new DbContextOptionsBuilder <OutboxEventContext>()
                    .UseSqlServer(dbConnection)
                    .Options);

                return(new OutboxEventService(outboxEventContext));
            });

            builder.ServiceCollection.AddTransient <ITransactionalOutboxService, TransactionalOutboxService>();

            builder.ServiceCollection.AddScoped <IOutboxMessageRelay, OutboxMessageRelay>();

            if (enableAutoMigration)
            {
                builder.ServiceCollection.AddHostedService <OutboxMigratorHostedService>();
            }

            return(builder.ServiceCollection);
        }
        public static IWrapperizerBuilder AddHandlers(
            this IWrapperizerBuilder builder,
            Action <WrapperizerCqrsContextBuilder> configure = null,
            ServiceLifetime serviceLifetime = Transient,
            params Assembly[] assemblies)
        {
            if (!assemblies.SafeAny())
            {
                assemblies = GetListOfEntryAssemblyWithReferences();
            }

            var wrapperizerCoreServiceCollection =
                new WrapperizerCqrsContextBuilder(builder.ServiceCollection, serviceLifetime);

            configure?.Invoke(wrapperizerCoreServiceCollection);

            builder.ServiceCollection.AddMediatR(assemblies,
                                                 configuration => configuration = wrapperizerCoreServiceCollection.ServiceLifetime switch
            {
                Singleton => configuration.AsSingleton(),
                Scoped => configuration.AsScoped(),
                _ => configuration.AsTransient()
            });