/// <summary> /// IoC初始化 /// </summary> /// <param name="services"></param> /// <returns></returns> private IServiceProvider InitIoC(IServiceCollection services) { services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddMemoryCache(); CacheProvider cacheProvider = new CacheProvider { IsUseRedis = Configuration.GetSection("CacheProvider:UseRedis").Value.ToBool(false), ConnectionString = Configuration.GetSection("CacheProvider:Redis_ConnectionString").Value, InstanceName = Configuration.GetSection("CacheProvider:Redis_InstanceName").Value }; //判断是否使用Redis,如果不使用 Redis就默认使用 MemoryCache if (cacheProvider.IsUseRedis) { //Use Redis services.AddStackExchangeRedisCache(options => { options.Configuration = cacheProvider.ConnectionString; options.InstanceName = cacheProvider.InstanceName; }); services.AddSingleton(typeof(ICacheService), new RedisCacheService(new RedisCacheOptions { Configuration = cacheProvider.ConnectionString, InstanceName = cacheProvider.InstanceName }, 0)); } else { //Use MemoryCache services.AddSingleton <IMemoryCache>(factory => { var cache = new MemoryCache(new MemoryCacheOptions()); return(cache); }); services.AddSingleton <ICacheService, MemoryCacheService>(); } var jwtConfig = Configuration.GetSection("Jwt"); var jwtOption = new JwtOption { Issuer = jwtConfig["Issuer"], Expiration = Convert.ToInt16(jwtConfig["Expiration"]), Secret = jwtConfig["Secret"], Audience = jwtConfig["Audience"], refreshJwtTime = Convert.ToInt16(jwtConfig["refreshJwtTime"]) }; services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;; }).AddJwtBearer(jwtBearerOptions => { jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters { //NameClaimType = JwtClaimTypes.Name, //RoleClaimType = JwtClaimTypes.Role, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(jwtOption.Secret)),//秘钥 ValidateIssuer = true, ValidIssuer = jwtOption.Issuer, ValidateAudience = true, ValidAudience = jwtOption.Audience, ValidateLifetime = true, ClockSkew = TimeSpan.FromMinutes(5) }; }); IoCContainer.Register(cacheProvider); //注册缓存配置 IoCContainer.Register(Configuration); //注册配置 IoCContainer.Register(jwtOption); //注册配置 services.AddScoped(typeof(SSOAuthHelper)); services.AddScoped(typeof(AuthHelper)); IoCContainer.Register("Yuebon.Commons"); IoCContainer.Register("Yuebon.AspNetCore"); IoCContainer.Register("Yuebon.Security.Core"); IoCContainer.Register("Yuebon.Messages.Core"); IoCContainer.RegisterNew("Yuebon.Security.Core", "Yuebon.Security"); IoCContainer.RegisterNew("Yuebon.Messages.Core", "Yuebon.Messages"); List <Assembly> myAssembly = new List <Assembly>(); myAssembly.Add(Assembly.Load("Yuebon.Security.Core")); myAssembly.Add(Assembly.Load("Yuebon.Messages.Core")); services.AddAutoMapper(myAssembly); services.AddScoped <IMapper, Mapper>(); return(IoCContainer.Build(services)); }