示例#1
0
        public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment)
        {
            if (environment.IsEnvironment("Testing"))
            {
                // Add Persistence Infra
                services.AddDbContext <AppDbContext>(options =>
                                                     options.UseInMemoryDatabase(databaseName: "MeterData"));
                // Add Identity Infra
                services.AddDbContext <AppIdentityDbContext>(options =>
                                                             options.UseInMemoryDatabase(databaseName: "IdentityData"));
            }
            else
            {
                // Add Persistence Infra
                services.AddDbContext <AppDbContext>(options =>
                                                     options.UseNpgsql(
                                                         configuration.GetConnectionString("DefaultConnection")));

                services.AddDbContext <AppIdentityDbContext>(options =>
                                                             options.UseNpgsql(
                                                                 configuration.GetConnectionString("DefaultConnection")));
            }

            services.AddIdentity <ApplicationUser, IdentityRole>(options =>
            {
                options.SignIn.RequireConfirmedAccount  = false;
                options.Password.RequireDigit           = true;
                options.Password.RequireLowercase       = true;
                options.Password.RequireNonAlphanumeric = true;
                options.Password.RequireUppercase       = false;
                options.Password.RequiredLength         = 4;
                options.Password.RequiredUniqueChars    = 2;
            })
            .AddEntityFrameworkStores <AppIdentityDbContext>()
            .AddDefaultTokenProviders();

            services.ConfigureApplicationCookie(options =>
            {
                // configure login path for return urls
                // https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-3.1&tabs=visual-studio
                options.LoginPath         = "/Identity/Account/Login";
                options.AccessDeniedPath  = "/Identity/Account/AccessDenied";
                options.SlidingExpiration = true;
                options.ExpireTimeSpan    = TimeSpan.FromDays(30);
            });

            // Add meter data fetch service
            services.AddSingleton <IMeterDataService, MeterDataService>();
            services.AddSingleton <IScadaDataService, ScadaDataService>();
            services.AddSingleton <IWbesArchiveDataService, WbesArchiveDataService>();
            services.AddSingleton <IAgcFileUtilsService, AgcFileUtilsService>();
            services.AddSingleton <IWbesLiveDataService, WbesLiveDataService>();
            services.AddSingleton <IScadaNodesPingStatsService, ScadaNodesPingStatsService>();

            // add pmu config
            PmuConfig pmuConfig = new PmuConfig();

            configuration.Bind("PmuConfig", pmuConfig);
            services.AddSingleton(pmuConfig);

            // add reports data config
            ReportsConfig reportsConfig = new ReportsConfig();

            configuration.Bind("ReportsData", reportsConfig);
            services.AddSingleton(reportsConfig);

            // add pmu data service
            services.AddSingleton <IPMUHistDataService, PMUHistDataService>();

            // add reports data service
            services.AddSingleton <IReportsDataService, ReportsDataService>();

            // add email settings from app config
            EmailConfiguration emailConfig = new EmailConfiguration();

            configuration.Bind("EmailSettings", emailConfig);
            services.AddSingleton(emailConfig);

            // add sms settings from app config
            SmsConfiguration smsConfig = new SmsConfiguration();

            configuration.Bind("SmsSettings", smsConfig);
            services.AddSingleton(smsConfig);

            // Add Infra services
            services.AddTransient <IEmailSender, EmailSender>();
            services.AddTransient <ISmsSender, SmsSender>();

            // Add temp monitoring realtime service
            services.AddSingleton <IDeviceDataService, DeviceDataService>();

            return(services);
        }
 public ReportsDataService(ReportsConfig reportsConfig)
 {
     _reportsConfig = reportsConfig;
 }