You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

64 lines
2.3 KiB

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Znyc.Cloudcar.Admin.Commons.Core.DataManager
{
public class ZnycDbOptionsSetup : IConfigureOptions<ZnycDbOptions>
{
private readonly IConfiguration _configuration;
public ZnycDbOptionsSetup(IConfiguration configuration)
{
_configuration = configuration;
}
/// <summary>
/// 配置options各属性信息
/// </summary>
/// <param name="options"></param>
public void Configure(ZnycDbOptions options)
{
SetDbConnectionsOptions(options);
}
private void SetDbConnectionsOptions(ZnycDbOptions options)
{
Dictionary<string, DbConnectionOptions> dbConnectionMap = new Dictionary<string, DbConnectionOptions>();
options.DbConnections = dbConnectionMap;
string dbConfigName = Configs.GetConfigurationValue("AppSetting", "DefaultDataBase");
IConfiguration section = _configuration.GetSection("DbConnections:" + dbConfigName);
Dictionary<string, DbConnectionOptions> dict = section.Get<Dictionary<string, DbConnectionOptions>>();
if (dict == null || dict.Count == 0)
{
string connectionString = _configuration["ConnectionStrings:DefaultDbContext"];
if (connectionString == null)
{
return;
}
dbConnectionMap.Add("DefaultDb", new DbConnectionOptions
{
ConnectionString = connectionString,
DatabaseType = options.DefaultDatabaseType
});
return;
}
IGrouping<string, string> ambiguous = dict.Keys.GroupBy(d => d).FirstOrDefault(d => d.Count() > 1);
if (ambiguous != null)
{
throw new Exception($"数据上下文配置中存在多个配置节点拥有同一个数据库连接名称,存在二义性:{ambiguous.First()}");
}
foreach (KeyValuePair<string, DbConnectionOptions> db in dict)
{
dbConnectionMap.Add(db.Key, db.Value);
}
}
}
}