70 lines
2.1 KiB
C#
70 lines
2.1 KiB
C#
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;
|
||
}
|
||
}
|
||
|