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); }
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); }
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); }
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() });