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