Exemplo n.º 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var connectionString = _configuration["MySqlConnection:MySqlConnectionString"];

            services.AddDbContext <MySqlContext>(options => options.UseMySql(connectionString));

            //Adding Migration Support
            ExecuteMigration(connectionString);

            var singningConfiguration = new SingningConfiguration();

            services.AddSingleton(singningConfiguration);

            var tokenConfiguration = new TokenConfiguration();

            new ConfigureFromConfigurationOptions <TokenConfiguration>(
                _configuration.GetSection("TokenConfigurations")
                )
            .Configure(tokenConfiguration);

            services.AddSingleton(tokenConfiguration);

            services.AddAuthentication(authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOptions =>
            {
                var paramsValidation = bearerOptions.TokenValidationParameters;
                paramsValidation.IssuerSigningKey = singningConfiguration.Key;
                paramsValidation.ValidAudience    = tokenConfiguration.Audience;
                paramsValidation.ValidIssuer      = tokenConfiguration.Issuer;

                paramsValidation.ValidateLifetime = true;

                paramsValidation.ClockSkew = TimeSpan.Zero;
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());
            });

            services.AddMvc(options =>
            {
                options.RespectBrowserAcceptHeader = true;
                options.FormatterMappings.SetMediaTypeMappingForFormat("xlm", MediaTypeHeaderValue.Parse("text/xlm"));
                options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json"));
            })
            .AddXmlSerializerFormatters();

            //Hateoas
            var filtertOptions = new HyperMediaFilterOptions();

            filtertOptions.ObjectContentResponseEnricherList.Add(new PersonEnricher());
            filtertOptions.ObjectContentResponseEnricherList.Add(new BookEnricher());
            services.AddSingleton(filtertOptions);

            services.AddApiVersioning(option => option.ReportApiVersions = true);

            //Swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",
                             new Info
                {
                    Title   = "Restfull API With APS.NET CORE",
                    Version = "v1"
                });
                c.IgnoreObsoleteProperties();
            });

            //Dependency Injection
            services.AddScoped <IPersonService, PersonService>();
            services.AddScoped <IPersonRepository, PersonRepository>();
            services.AddScoped <IBookService, BookService>();
            services.AddScoped <IBookRepository, BookRepository>();
            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IFileService, FileService>();
        }
Exemplo n.º 2
0
 public UserService(IUserRepository repository, SingningConfiguration signingConfiguration, TokenConfiguration tokenConfiguration)
 {
     _repository           = repository;
     _signingConfiguration = signingConfiguration;
     _tokenConfiguration   = tokenConfiguration;
 }