using GFramework.Core.Abstractions.ioc;
using GFramework.Core.Abstractions.logging;
using GFramework.Core.Abstractions.system;
using GFramework.Core.logging;
using GFramework.Core.rule;
using Microsoft.Extensions.DependencyInjection;
namespace GFramework.Core.ioc;
///
/// Microsoft.Extensions.DependencyInjection 适配器
/// 将 Microsoft DI 包装为 IIocContainer 接口实现
/// 提供线程安全的依赖注入容器功能
///
/// 可选的IServiceCollection实例,默认创建新的ServiceCollection
public class MicrosoftDiContainer(IServiceCollection? serviceCollection = null) : ContextAwareBase, IIocContainer
{
#region Context Ready
///
/// 上下文准备就绪时的回调方法
/// 初始化日志记录器实例
///
protected override void OnContextReady()
{
_logger = LoggerFactoryResolver.Provider.CreateLogger(nameof(MicrosoftDiContainer));
}
#endregion
#region Fields
///
/// 服务提供者,在容器冻结后构建,用于解析服务实例
///
private IServiceProvider? _provider;
///
/// 容器冻结状态标志,true表示容器已冻结不可修改
///
private volatile bool _frozen;
///
/// 读写锁,确保多线程环境下的线程安全操作
///
private readonly ReaderWriterLockSlim _lock = new(LockRecursionPolicy.NoRecursion);
///
/// 已注册实例的集合,用于快速检查实例是否存在
///
private readonly HashSet