Esempio n. 1
0
 public static IdempotencyConfigurationBuilder <TUnitOfWork> PersistWithEfCore <TUnitOfWork, TDbContext>(
     this IdempotencyConfigurationBuilder <TUnitOfWork> builder,
     Func <IServiceProvider, TDbContext> dbContextFactory)
     where TDbContext : DbContext, IDbContextWithOutbox, IDbContextWithIdGenerator
     where TUnitOfWork : UnitOfWorkBase <TDbContext>
 {
     return(builder.PersistWithEfCore(dbContextFactory, null));
 }
Esempio n. 2
0
        public static IdempotencyConfigurationBuilder <TUnitOfWork> PersistWithEfCore <TUnitOfWork, TDbContext>(
            this IdempotencyConfigurationBuilder <TUnitOfWork> builder,
            Func <IServiceProvider, TDbContext> dbContextFactory,
            Action <IdempotencyEfCoreOptions <TDbContext, TUnitOfWork> > optionsBuilder)
            where TDbContext : DbContext, IDbContextWithOutbox, IDbContextWithIdGenerator
            where TUnitOfWork : UnitOfWorkBase <TDbContext>
        {
            var options = new IdempotencyEfCoreOptions <TDbContext, TUnitOfWork>();

            optionsBuilder?.Invoke(options);

            Func <IServiceProvider, TUnitOfWork> unitOfWorkFactory;

            if (options.UnitOfWorkFactory == null)
            {
                builder.Services.AddTransient <TUnitOfWork>();

                unitOfWorkFactory = s => s.GetRequiredService <TUnitOfWork>();
            }
            else
            {
                unitOfWorkFactory = options.UnitOfWorkFactory;
            }

            builder.Services.AddTransient <IUnitOfWorkFactory <TUnitOfWork> >(c =>
                                                                              new UnitOfWorkFactory <TUnitOfWork, TDbContext>(
                                                                                  c.GetRequiredService <IOutboxDispatcher>(),
                                                                                  () => dbContextFactory.Invoke(c),
                                                                                  () => unitOfWorkFactory(c)));

            builder.Services.AddTransient <IOutboxReadRepository>(c =>
                                                                  new OutboxReadRepository <TDbContext>(
                                                                      c.GetRequiredService <ILogger <OutboxReadRepository <TDbContext> > >(),
                                                                      () => dbContextFactory.Invoke(c),
                                                                      options.OutboxDeserializer));

            builder.Services.AddTransient <IIdGeneratorRepository, IdGeneratorRepository <TDbContext> >(c =>
                                                                                                        new IdGeneratorRepository <TDbContext>(
                                                                                                            () => dbContextFactory.Invoke(c)));

            return(builder);
        }
        public static IdempotencyConfigurationBuilder <TUnitOfWork> DispatchWithMassTransit <TUnitOfWork>(this IdempotencyConfigurationBuilder <TUnitOfWork> builder)
            where TUnitOfWork : UnitOfWorkBase
        {
            builder.Services.AddTransient <IOutboxDispatcher, RootOutboxDispatcher>();

            return(builder);
        }