DIManager.cs

117 lines | 3.262 kB Blame History Raw Download
using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

using Microsoft.EntityFrameworkCore;

using Microsoft.AspNetCore.Identity;


using WebFileServ.Model.Entities.Identity;

using WebFileServ.Model.DAL.DataInit;
using WebFileServ.Model.DAL.DataBase.EF;

using WebFileServ.Model.BLL;

namespace WebFileServ.Model.DI
{

    public enum AppEnviroment 
    {
        WebApp,
        UnitTests,
        ConsoleTest
    }


    public class DIManager
    {
        public AppEnviroment Enviroment { private set; get; }

        public DIManager(AppEnviroment enviroment) 
        {
            Enviroment = enviroment;
        }

        public void Registry(IServiceCollection services, IConfiguration configuration) 
        {
            if (configuration != null)
            {
                foreach (var elem in configuration.AsEnumerable())
                {
                    System.Diagnostics.Trace.WriteLine($"{elem.Key} | {elem.Value}");
                }
            }


            RegistryDAL(services, configuration);

            RegistryIdentity(services, configuration);

            RegistryBLL(services, configuration);
        }



        private void RegistryDAL(IServiceCollection services, IConfiguration configuration) 
        {
            services
                .AddSingleton(configuration);


            services.AddDbContext<ApplicationDbContext>(options =>
                        options.UseSqlServer(
                            configuration.GetConnectionString("DefaultConnection")
                        )
                    );


            services
                .AddSingleton<DataInitializerConfig>()
                .AddScoped<DataInitializer>();
        }

        private void RegistryIdentity(IServiceCollection services, IConfiguration configuration) 
        {
            if (Enviroment != AppEnviroment.UnitTests)
            {
                services
                    .AddDefaultIdentity<ApplicationUser>(
                        options =>
                        {
                            options.SignIn.RequireConfirmedAccount = false;

                            options.Password = new PasswordOptions()
                            {
                                RequiredLength = 0,
                                RequireDigit = false,
                                RequiredUniqueChars = 0,
                                RequireLowercase = false,
                                RequireUppercase = false,
                                RequireNonAlphanumeric = false
                            };
                        }
                    )                    
                    .AddRoles<ApplicationRole>()
                    .AddRoleManager<RoleManager<ApplicationRole>>()
                    .AddEntityFrameworkStores<ApplicationDbContext>();

                services
                    .AddIdentityServer()                
                    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
            }            
        }

        private void RegistryBLL(IServiceCollection services, IConfiguration configuration) 
        {
            services
                .AddSingleton<WeatherForecastLogic>();
        }

    }
}