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