public async Task <TResult> ExecuteQueryAsync <TResult>(IQuery <TResult> query) { using var scope = UserAccessCompositionRoot.BeginScope(); var mediator = scope.ServiceProvider.GetService(typeof(IMediator)) as IMediator; return(await mediator.Send(query)); }
private static void Initialize(IConfiguration configuration, ILogger logger) { var serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(x => x.AddSerilog(logger)); serviceCollection.AddSingleton(x => configuration.GetSection("AzureStorage").Get <AzureStorageConfiguration>()); serviceCollection.AddSingleton(x => configuration.GetSection("Authentification").Get <AuthenticationConfiguration>()); serviceCollection.AddTransient <IDateTimeProvider, DateTimeProvider>(); serviceCollection.AddDbContext <DbContext, UserAccessContext>(options => options.UseSqlServer(configuration.GetConnectionString("UserAccessDbContext"))); serviceCollection.AddScoped <IUserRepository, UserRepository>(); serviceCollection.AddScoped <IDomainEventsDispatcher, DomainEventsDispatcher>(); serviceCollection.AddScoped <IDomainEventsAccessor, DomainEventsAccessor>(); serviceCollection.AddScoped <IStorageDomainEventsRepository, AzureStorageDomainEventsRepository>(); serviceCollection.AddScoped <IHashPassword, Sha256HashPassword>(); serviceCollection.AddScoped <ITokenGenerator, JwtTokenGenerator>(); serviceCollection.AddScoped <IUnitOfWork, UnitOfWork>(); serviceCollection.AddTransient(typeof(IPipelineBehavior <,>), typeof(LoggingBehavior <,>)); serviceCollection.AddTransient(typeof(IPipelineBehavior <,>), typeof(UnitOfWorkBehavior <,>)); serviceCollection.AddMediatR(typeof(RegisterCommand).Assembly); UserAccessCompositionRoot.SetProvider(serviceCollection.BuildServiceProvider()); }