Esempio n. 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            var builder = _servicesManager.InitContainer();

            services.AddSingleton(typeof(ILogger <>), typeof(LoggerEx <>));
            services.AddAutoMapper(AssemblyUtils.GetAppAssemblies());
            services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            //	if (_neonConfig.EnableMetrics)
            //		services.AddMetrics();


            services.AddLogging();
            services.AddHttpClient();


            var key = Encoding.ASCII.GetBytes(Configuration.Get <NeonConfig>().JwtToken);

            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
                };
            });

            if (_neonConfig.EnableSwagger)
            {
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new Info {
                        Title = "Leon Home control", Version = "v1.0"
                    });
                });
            }

            services.AddDbContextPool <NeonDbContext>(options =>
            {
                //var config = Configuration.Get<NeonConfig>();

                var dbFullPath =
                    $"Data Source={_neonConfig.FileSystem.RootDirectory}{_neonConfig.EventsDatabase.DatabaseDirectory}{Path.DirectorySeparatorChar}{_neonConfig.Database.ConnectionString}";
                options.UseSqlite(dbFullPath);
            });

            services.AddTransient <DbContext, NeonDbContext>();
            services.AddResponseCompression();
            builder.Populate(services);
            _container = _servicesManager.Build();

            return(new AutofacServiceProvider(_container));
        }