using MiaoYu.Core.CodeGenerator.Abstractions; namespace MiaoYu.Core.CodeGenerator.Core; /// /// 数据源管理器 /// [Component] public class DataSourceManager : IScopedDependency { private readonly IEnumerable _providers; /// /// 构造函数(通过依赖注入自动收集所有IDataSourceProvider实现) /// /// 所有数据源提供者 public DataSourceManager(IEnumerable providers) { _providers = providers.OrderBy(p => p.Config.Order); } /// /// 获取所有数据源提供者 /// /// 数据源提供者集合 public IEnumerable GetAllProviders() => _providers; /// /// 根据数据库标识获取数据源提供者 /// /// 数据库标识(如:Admin, MiaoYuChat) /// 数据源提供者,如果未找到返回null public IDataSourceProvider? GetProvider(string databaseKey) { if (string.IsNullOrWhiteSpace(databaseKey)) return null; return _providers.FirstOrDefault(p => p.Config.DatabaseKey.Equals(databaseKey, StringComparison.OrdinalIgnoreCase)); } /// /// 获取所有数据源的表信息 /// /// 所有表信息列表 public List GetAllTables() { var allTables = new List(); foreach (var provider in _providers) { try { var tables = provider.GetTables(); if (tables != null && tables.Count > 0) { allTables.AddRange(tables); } } catch (Exception ex) { LogUtil.Log.Warning($"获取数据源 {provider.Config.DatabaseKey} 的表信息失败: {ex.Message}"); } } return allTables; } }