using GFramework.Core.Abstractions.ioc;
using GFramework.Core.Abstractions.logging;
using GFramework.Core.Abstractions.system;
using GFramework.Core.logging;
using GFramework.Core.rule;
namespace GFramework.Core.ioc;
///
/// IOC容器类,用于管理对象的注册和获取
///
public class IocContainer : ContextAwareBase, IIocContainer
{
#region Lock
///
/// 读写锁对象,用于控制多线程环境下对共享资源的访问
/// 使用ReaderWriterLockSlim提供高效的读写锁定机制
/// 配置为不支持递归锁,避免死锁风险
///
private readonly ReaderWriterLockSlim _lock = new(LockRecursionPolicy.NoRecursion);
#endregion
#region Flag
///
/// 冻结标志位,用于标识对象是否已被冻结
/// true表示对象已冻结,不可修改;false表示对象可正常修改
///
private volatile bool _frozen;
#endregion
#region Core
///
/// 存储所有已注册对象实例的集合,用于跟踪和管理容器中的所有对象
/// 使用HashSet确保对象唯一性,避免重复注册同一实例
///
private readonly HashSet