// This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            IConfigurationSection appSettingsSection = Configuration.GetSection("AppSettings");

            AppSettings appSettings = appSettingsSection.Get <AppSettings>();

            ServiceResolver.ResolveServices(services, appSettings.SqlConnectionString);

            services.Configure <AppSettings>(appSettingsSection);
            byte[] key = Encoding.ASCII.GetBytes(appSettings.JwtSecret);

            services.AddCors(options => options.AddPolicy("AllowAll", p => p
                                                          .SetIsOriginAllowed(x => _ = true)
                                                          .AllowAnyMethod()
                                                          .AllowAnyHeader()
                                                          .AllowCredentials()));
            services.AddOpenApiDocument(document =>
            {
                document.OperationProcessors.Add(new ApiVersionProcessor()
                {
                    IncludedVersions = new string[] { "1.0" }
                });
                document.DocumentName = "v1";
                document.PostProcess  = d => d.Info.Title = "Meetings Organizer Pro Web API v1.0 OpenAPI";
                document.AddSecurity("JWT", Enumerable.Empty <string>(), new OpenApiSecurityScheme
                {
                    Type        = OpenApiSecuritySchemeType.ApiKey,
                    Name        = "Authorization",
                    In          = OpenApiSecurityApiKeyLocation.Header,
                    Description = "Type into the textbox: Bearer {your JWT token}."
                });

                document.OperationProcessors.Add(
                    new AspNetCoreOperationSecurityScopeProcessor("JWT"));
            });

            services.AddApiVersioning(options =>
            {
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.DefaultApiVersion = new ApiVersion(1, 0);
                options.ReportApiVersions = true;
                options.ApiVersionReader  = new UrlSegmentApiVersionReader();
            });
            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(key),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
            });

            services.AddControllers();
        }