public static class ApplicationServicesRegistration
{
public static IServiceCollection AddApplicationServices(this IServiceCollection services,IConfiguration configuration)
{
//services.AddLogging();
services.AddAutoMapper(Assembly.GetExecutingAssembly());
services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
// Add MediatR services and register services from the current assembly
services.AddMediatR(config => config.RegisterServicesFromAssemblies(
Assembly.GetExecutingAssembly()));
// Behaviors mediatr request pipeline
services.AddTransient(typeof(IPipelineBehavior<,>),
typeof(PerformanceBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>),
typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>),
typeof(UnhandledExceptionBehavior<,>));
//services.Configure<MailSettings>(config.GetSection("MailSettings"));
services.AddTransient<IDateTime, DateTimeService>();
services.AddTransient<IEmailService, EmailService>();
services.AddTransient<ICsvFileBuilder, CsvFileBuilderService>();
// Redis
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = configuration.GetConnectionString("RedisConnection");
var assemblyName = Assembly.GetExecutingAssembly().GetName();
options.InstanceName = assemblyName.Name;
});
return services;
}
}
public static class InfrastructureServices
{
public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddScoped<JwtHandler>();
services.AddDbContext<ProjectStoreContext>(opts =>
{
opts.UseNpgsql(configuration.GetConnectionString("PostgreSQL"));
}).AddLogging();
if (configuration["ASPNETCORE_ENVIRONMENT"] == "Production")
{
services.AddDbContext<ApplicationContext>(options =>
options.UseSqlServer(
configuration.GetConnectionString("MSSQL")
)
);
}
else
{
services.AddDbContext<ApplicationContext>(options =>
options.UseSqlServer(
configuration.GetConnectionString("DefaultConnection")
)
);
}
return services;
}
}