src/Services/User/User.Infrastructure/DependencyInjection.cs (52 lines of code) (raw):
// =========================================================================
// Copyright 2020 EPAM Systems, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =========================================================================
using Epam.CovidResistance.Services.User.Application.Common.Interfaces;
using Epam.CovidResistance.Services.User.Infrastructure.Identity;
using Epam.CovidResistance.Services.User.Infrastructure.Models;
using Epam.CovidResistance.Services.User.Infrastructure.Persistence;
using Epam.CovidResistance.Shared.IdentityDbContext;
using Epam.CovidResistance.Shared.IdentityDbContext.Identity;
using Epam.CovidResistance.Shared.Infrastructure.Persistence;
using Epam.CovidResistance.Shared.Infrastructure.Persistence.Repositories;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace Epam.CovidResistance.Services.User.Infrastructure
{
public static class DependencyInjection
{
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
{
services.AddOptions<ClientIdentityOptions>()
.Configure<IConfiguration>((settings, config) =>
{
config.GetSection("ClientIdentity").Bind(settings);
});
services.AddOptions<CassandraOptions>()
.Configure<IConfiguration>((settings, config) =>
{
config.GetSection("Cassandra").Bind(settings);
});
services.AddSingleton<ICassandraCluster, CassandraCluster>();
services.AddSingleton<ICassandraSession, CassandraSession>();
services.AddTransient<IUserRepository, UserRepository>();
services.AddTransient<IMedicalRegistrationRepository, MedicalRegistrationRepository>();
services.AddScoped<AspNetUserManager<ApplicationUser>>();
services.AddTransient<IIdentityService, IdentityService>();
services.AddIdentityWithStore(configuration, typeof(ApplicationDbContextSeed).Assembly);
services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 8;
options.Password.RequiredUniqueChars = 1;
options.Lockout.AllowedForNewUsers = true;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
options.Lockout.MaxFailedAccessAttempts = 4;
});
return services;
}
}
}