.Net Core下使用IConfiguration和IOptions实现自动注入
1. 使用IConfiguration自动注入
执行到Startup的时候,IConfiguration已经被注入到services了,不需要我们额外添加注入的代码,缺省就是读取appsettings.json文件,你可以理解在Startup.cs里有隐藏的注入代码类似如下:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
services.AddSingleton<IConfiguration>(Configuration);
在Controller里直接在构造函数里传入IConfiguration,看一下效果:
我们可以看到能把appsettings.json中的配置文件都加载出来。
2.使用IOptions自动注入
2.1 先定义一个JwtSetting类:
public class JwtSetting { /// <summary> /// 颁发者 /// </summary> public string Issuer { get; set; } /// <summary> /// 接收者 /// </summary> public string Audience { get; set; } /// <summary> /// 令牌密码 /// </summary> public string SecurityKey { get; set; } /// <summary> /// 过期时间 /// </summary> public long ExpireSeconds { get; set; } /// <summary> /// 签名 /// </summary> public SigningCredentials Credentials { get { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecurityKey)); return new SigningCredentials(key, SecurityAlgorithms.HmacSha256); } } }
2.2 在Startup=》ConfigureServices方法中进行注入
services.Configure<JwtSetting>(Configuration.GetSection("JwtSetting"));
2.3 在Service构造函数中传入 IOptions<JwtSetting> option
private readonly JwtSetting _jwtSetting; public TokenService(IOptions<JwtSetting> option) { _jwtSetting = option.Value; }
看效果: