public static async Task MainAsync(string[] args) { var repo = new EmployeeSqlRepository(async() => { var conn = new PollySqlConnection( "Server=localhost;Database=Sandpit;Trusted_Connection=True", GetStandardDatabaseAsyncPolicies(), GetStandardDatabaseSyncPolicies()); await conn.OpenAsync().ConfigureAwait(false); return(conn); }); var employee = await repo.GetEmployeeAsync(1).ConfigureAwait(false); Console.WriteLine(JsonConvert.SerializeObject(employee)); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(option => option.Filters.Add(typeof(ModelStateValidationsFilterAttribute))); services.Configure <MvcOptions>(x => x.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin"))); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "iBookmark API - V1", Version = "v1", Contact = new Contact() { Email = "*****@*****.**", Name = "Lokesh Agarwal", Url = "www.iBookmark.com" } } ); var filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "iBookmark.API.xml"); c.IncludeXmlComments(filePath); }); var connectionString = Configuration.GetValue <string>("Data:BookmarkConnection:ConnectionString"); Polly.IAsyncPolicy[] databaseAsyncPolicies = GetDatabaseAsyncPolicies(); Polly.ISyncPolicy[] databaseSyncPolicies = GetDatabaseSyncPolicies(); services.AddSingleton <IUserRepository>( repo => new UserSqlRepository(() => { var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies); con.Open(); return(con); } ) ); services.AddSingleton <IContainerRepository>( repo => new ContainerSqlRepository(() => { var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies); con.Open(); return(con); } ) ); services.AddSingleton <IBookmarkRepository>( repo => new BookmarkSqlRepository(() => { var con = new PollySqlConnection(connectionString, databaseAsyncPolicies, databaseSyncPolicies); con.Open(); return(con); } ) ); services.AddScoped <IJwtFactory, JwtFactory>(); var saltKey = Configuration.GetValue <string>("Security:SaltKey"); var keySize = Configuration.GetValue <int>("Security:KeySize"); var passPhrase = Configuration.GetValue <string>("Security:PassPhrase"); services.AddSingleton <IEncryptorDecryptor>(en => new RijndaelManagedEncryptorDecryptor(saltKey, keySize, passPhrase)); if (HostingEnvironment.IsDevelopment()) { services.AddCors(action => action.AddPolicy("AllowAnyOrigin", builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader())); } #region JWT Token var JwtAppSettingsTokenOptions = Configuration.GetSection(nameof(JwtIssuerOptions)); services.Configure <JwtIssuerOptions>(options => { options.Issuer = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)]; options.Audience = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Audience)]; options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256); }); var tokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)], ValidateAudience = false, ValidAudience = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Audience)], ValidateIssuerSigningKey = true, IssuerSigningKey = _signingKey, RequireExpirationTime = false, ValidateLifetime = false, ClockSkew = TimeSpan.Zero, }; services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(configureOptions => { configureOptions.ClaimsIssuer = JwtAppSettingsTokenOptions[nameof(JwtIssuerOptions.Issuer)]; configureOptions.TokenValidationParameters = tokenValidationParameters; configureOptions.SaveToken = true; }); // api user claim policy services.AddAuthorization(options => { options.AddPolicy("AddContainer", policy => policy.RequireClaim(ClaimTypes.Role, "add:container")); options.AddPolicy("AddBookmark", policy => policy.RequireClaim(ClaimTypes.Role, "add:bookmark")); }); #endregion }