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
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);
|
|
}
|
|
}
|
|
}
|
|
}
|