解读ASP.NET 5 & MVC6系列教程(5):Configuration配置(3)

在RC版发布以后,微软又新增了一种敏感信息配置实现,程序集为Microsoft.Framework.ConfigurationModel.UserSecrets,通过该程序集的管理,我们可以将敏感的配置信息放在计算机的特殊目录下的secrets.json文件,其目录定义规则如下:

Windows: %APPDATA%\microsoft\UserSecrets\<applicationId>\secrets.json Linux: ~/.microsoft/usersecrets/<applicationId>\secrets.json Mac: ~/.microsoft/usersecrets/<applicationId>\secrets.json

我们来举例操作一下,首先,右键解决方案选择Manage User Secret,VS会自动给该程序创建一个applicationId,并保持在·project.json·文件中,示例如下:

{ "userSecretsId": "aspnet5-WebDemo01-20150430014447", "webroot": "wwwroot", "version": "1.0.0-*", }

接着会自动打开%APPDATA%\Microsoft\UserSecrets\aspnet5-WebDemo01-20150430014447\secrets.json文件,我们输入一个示例配置:

{ "AA": { "BB": "CC" } }

然后,我们在project.json文件里引用了上述程序集,再通过配置文件的统一方式进行注册,代码如下:

Configuration = new Configuration() .AddJsonFile("config.json") .AddEnvironmentVariables() .AddUserSecrets(); // AddUserSecrets是添加敏感信息的扩展方法

然后就可以想普通的调用方法一下调用了,示例如下:

var data = Configuration["AA:BB"]; // 结果:CC

通过这种方式,我们就可以将生产环境的配置信息放在隐私的位置了。

自定义配置源

通过以上示例以及查看其架构设计机制,我们可以发现,其实我们还可以自定义自己的配置源,比如我想从数据库中读取响应的配置信息,那我们只要定义一个DBConfigurationSource,并继承于ConfigurationSource即可,实现响应的Load重载即可。

public class DBConfigurationSource : BaseConfigurationSource { public override void Load() { // 读取数据库所有的key/value,并将其赋值给IDictionary<string, string>类型的Data数据 } }

如果你不把数据保存在Data属性里,那么你还要实现如下几个重载,以便从自己的私有数据集合里获取响应的值,比如从缓存中获取,示例如下:

public class DBConfigurationSource : BaseConfigurationSource { public override void Load() { // 读取数据库所有的key/value,保存在私有变量_data中 } public override void Set(string key, string value) { // 更新数据库key对应的值 // base.Set(key, value); } public override bool TryGet(string key, out string value) { // 从私有变量_data中获取key对应的value // return base.TryGet(key, out value); } public override IEnumerable<string> ProduceSubKeys(IEnumerable<string> earlierKeys, string prefix, string delimiter) { // 私有变量_data中,根据自己的机制返回响应的SubKeys // return base.ProduceSubKeys(earlierKeys, prefix, delimiter); } }

实现完上述类以后,再为自己创建一个扩展方法用于添加DB配置信息,代码如下:

public static class CatsConfigurationExtensions { public static IConfigurationSourceContainer AddDBConfiguration(this IConfigurationSourceContainer configuration) { configuration.Add(new DBConfigurationSource()); return configuration; } }

就可以通过.AddDBConfiguration()来添加DB配置源了。

注意,DB配置源需要使用数据库连接字符串,这一点需要注意(获取可以先从json配置文件获取连接字符串,然后再添加该配置源)。

配置信息遍历

在默认的配置源实现中,所有的类都继承于ConfigurationSource,并且将信息数据保存在Data属性中,所以如果要遍历这些数据,则需要将其转换为ConfigurationSource类型才能使用,示例代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjysfj.html