HuanMengAdmin/admin-server/MiaoYu.Core.CodeGenerator/Core/DataSourceManager.cs
2025-11-08 02:39:31 +08:00

70 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using MiaoYu.Core.CodeGenerator.Abstractions;
namespace MiaoYu.Core.CodeGenerator.Core;
/// <summary>
/// 数据源管理器
/// </summary>
[Component]
public class DataSourceManager : IScopedDependency
{
private readonly IEnumerable<IDataSourceProvider> _providers;
/// <summary>
/// 构造函数通过依赖注入自动收集所有IDataSourceProvider实现
/// </summary>
/// <param name="providers">所有数据源提供者</param>
public DataSourceManager(IEnumerable<IDataSourceProvider> providers)
{
_providers = providers.OrderBy(p => p.Config.Order);
}
/// <summary>
/// 获取所有数据源提供者
/// </summary>
/// <returns>数据源提供者集合</returns>
public IEnumerable<IDataSourceProvider> GetAllProviders() => _providers;
/// <summary>
/// 根据数据库标识获取数据源提供者
/// </summary>
/// <param name="databaseKey">数据库标识Admin, MiaoYuChat</param>
/// <returns>数据源提供者如果未找到返回null</returns>
public IDataSourceProvider? GetProvider(string databaseKey)
{
if (string.IsNullOrWhiteSpace(databaseKey))
return null;
return _providers.FirstOrDefault(p =>
p.Config.DatabaseKey.Equals(databaseKey, StringComparison.OrdinalIgnoreCase));
}
/// <summary>
/// 获取所有数据源的表信息
/// </summary>
/// <returns>所有表信息列表</returns>
public List<DbTableInfo> GetAllTables()
{
var allTables = new List<DbTableInfo>();
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;
}
}