[ASP.NET Core 3框架揭秘] 配置[9]:自定义配置源
2021-05-07 05:28
标签:oid uid created ensure null for red oba length 我们将这个自定义ConfigurationSource命名为DbConfigurationSource。在正式介绍它的实现之前,我们先来看看它在项目中的应用。我们将配置保存在SQL Server数据库中的某个数据表中,并采用Entity Framework Core来读取它。我们将连接字符串作为配置定义在一个名为“appSettings.json”的JSON文件中。 在如下所示的演示程序中,我们首先创建了一个ConfigurationBuilder对象,并在它上面注册了一个指向connectionString.json文件的JsonConfigurationSource对象。针对DbConfigurationSource对象的注册体现在扩展方法AddDatabase上,这个方法具有两个参数,分别代表连接字符串的名称和初始的配置数据。前者正是connectionString.json设置的连接字符串名称DefaultDb,后者是一个字典对象,它提供的原始配置正好可以构成一个Profile对象。在利用ConfigurationBuilde对象创建出相应的IConfiguration对象之后,我们读取配置将其绑定为一个Profile对象。 public class Program } [Table("ApplicationSettings")] } public class ApplicationSettingsContext : DbContext } public class DbConfigurationSource : IConfigurationSource } 实例演示中用来注册DbConfigurationSource对象的扩展方法AddDatabase具有如下的定义。该方法首先调用IConfigurationBuilder对象的Build方法创建出一个IConfiguration对象,并调用该对象[A5] 的扩展方法GetConnectionString根据指定的连接字符串名称得到完整的连接字符串。接下来我们调用构造函数创建一个DbConfigurationSource对象并注册到ConfigurationBuilder对象上。创建DbConfigurationSource对象时指定的Action [ASP.NET Core 3框架揭秘] 配置[9]:自定义配置源 标签:oid uid created ensure null for red oba length 原文地址:https://blog.51cto.com/14650697/2461168{
"connectionStrings": {
"DefaultDb": "Server = ... ; Database=...; Uid = ...; Pwd = ..."
}
}
{
static void Main()
{
var initialSettings = new Dictionary
{
["Gender"] = "Male",
["Age"] = "18",
["ContactInfo:EmailAddress"] = "foobar@outlook.com",
["ContactInfo:PhoneNo"] = "123456789"
}; var profile = new ConfigurationBuilder()
.AddJsonFile("appSettings.json")
.AddDatabase("DefaultDb", initialSettings)
.Build()
.Get
如上面的代码片断所示,针对DbConfigurationSource的应用仅仅体现在我们为IConfigurationBuilder对象定义的AddDatabase扩展方法上,所以使用起来是非常方便的,那么这个扩展方法背后有着怎样的逻辑实现呢?DbConfigurationSource采用Entity Framework Core并以Code First的方式进行数据操作,如下所示的ApplicationSetting是表示基本配置项的POCO类型,我们将配置项的Key以小写的方式存储。另一个ApplicationSettingsContext是对应的DbContext类型。
public class ApplicationSetting
{
private string key;[Key]
public string Key
{
get { return key; }
set { key = value.ToLowerInvariant(); }
}
[Required]
[MaxLength(512)]
public string Value { get; set; }
public ApplicationSetting()
{ }
public ApplicationSetting(string key, string value)
{
Key = key;
Value = value;
}
{
public ApplicationSettingsContext(DbContextOptions options) : base(options)
{ }public DbSet Settings { get; set; }
如下所示的是DbConfigurationSource类型的定义,它的构造函数具有两个参数,第一个参数类型为Action
{
private Action
private IDictionarypublic DbConfigurationSource(Action
DbConfigurationProvider派生于抽象类ConfigurationProvider。在重写的Load方法中,它会根据提供的Actionpublic class DbConfigurationProvider: ConfigurationProvider
{
private readonly IDictionary
public static class DbConfigurationExtensions
{
public static IConfigurationBuilder AddDatabase( this IConfigurationBuilder builder, string connectionStringName, IDictionary
文章标题:[ASP.NET Core 3框架揭秘] 配置[9]:自定义配置源
文章链接:http://soscw.com/index.php/essay/83539.html