示例#1
0
        public void ConfigureServices(IServiceCollection services)
        {
            var moduleRepo              = new ModuleRepository();
            var elementMapper           = new ElementTypeTemplateMapper();
            var controlMapper           = new ControlTypeTemplateMapper();
            var validationMapper        = new ValidationAttributeJsConverterMapper();
            var moduleBuilder           = new ModuleBuilder(moduleRepo, elementMapper, controlMapper, validationMapper);
            var inMemoryFlowPersistance = new InMemoryFlowPersistance();

            services.AddSingleton <IElementTypeTemplateMapper>(elementMapper);
            services.AddSingleton <IControlTypeTemplateMapper>(controlMapper);
            services.AddSingleton <IValidationAttributeJsConverterMapper>(validationMapper);
            services.AddSingleton <IModuleRepository>(moduleRepo);
            services.AddSingleton <IFlowPersistance>(inMemoryFlowPersistance);

            validationMapper.AddValidator("MaxLengthAttribute", CustomAttribuesJsConverters.MaxLengthJsConverter);
            controlMapper.AddTemplate("defaultButton", ControlType.Button, true);

            UserRegistrationFlow.RegisterFlow(moduleBuilder);
            UserLoginFlow.RegisterFlow(moduleBuilder);
            UserEditFlow.RegisterFlow(moduleBuilder);

            A1Flow.RegisterFlow(moduleBuilder);
            A2A3A4Flow.RegisterFlow(moduleBuilder);
            A7Flow.RegisterFlow(moduleBuilder);

            TestFlow.RegisterFlow(moduleBuilder);
            SimpleFlow.RegisterFlow(moduleBuilder);

            MainReportFlow.RegisterFlow(moduleBuilder);

            services.AddControllers(c =>
            {
                c.EnableEndpointRouting = false;
            }).ConfigureApplicationPartManager(apm =>
            {
                apm.FeatureProviders.Add(new FlowControllerFeatureProvider(moduleRepo));
            }).AddNewtonsoftJson(j =>
            {
                j.SerializerSettings.ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                };
                j.SerializerSettings.Converters.Add(new StringEnumConverter
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                });
                j.SerializerSettings.Converters.Add(new BaseCollectionConverter());
                j.SerializerSettings.NullValueHandling     = NullValueHandling.Ignore;
                j.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            });

            var symmetricKey = Encoding.ASCII.GetBytes(Configuration.GetSection("Jwt").GetValue <string>("SymmetricKey"));

            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata      = false;
                x.SaveToken                 = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(symmetricKey),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
            });
            services.AddAuthorization(a =>
            {
                a.AddPolicy("IsAccountEnabled", policy => policy.RequireClaim("account_enabled", "True", "true"));
            });

            services.AddSwaggerGen(s =>
            {
                s.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Core Dui Example API", Version = "v1"
                });
                s.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    In          = ParameterLocation.Header,
                    Description = "Please insert JWT with Bearer into field",
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.ApiKey
                });
                s.AddSecurityRequirement(new OpenApiSecurityRequirement {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            }
                        },
                        new string[] { }
                    }
                });
            });

            services.AddDbContext <DbLabCalcContext>(o =>
            {
                o.UseLazyLoadingProxies().UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            });

            services.Configure <LdapConfig>(Configuration.GetSection("Ldap"));
            services.Configure <JwtConfig>(Configuration.GetSection("Jwt"));
            services.Configure <SmtpConfig>(Configuration.GetSection("Smtp"));
            services.Configure <AppConfig>(Configuration.GetSection("App"));

            services.AddScoped <IEmailClient, GmailEmailClient>();
            services.AddScoped <IAuthenticationService <LdapUser>, LdapAuthenticationService>();
            services.AddScoped <IAuthenticationService <DbUserClient>, DbAuthenticationService>();
            services.AddScoped <IEmailTemplates, EmailTemplates>();

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
        }