using System; using System.Collections.Generic; using GFramework.Core.Abstractions.rule; using GFramework.Core.Abstractions.system; namespace GFramework.Core.Abstractions.ioc; /// /// 依赖注入容器接口,定义了服务注册、解析和管理的基本操作 /// public interface IIocContainer : IContextAware { #region Register Methods /// /// 注册单例 /// 一个类型只允许一个实例 /// /// 要注册为单例的类型 /// 要注册的单例实例 /// 当该类型已经注册过单例时抛出异常 void RegisterSingleton(T instance); /// /// 注册多个实例 /// 将实例注册到其实现的所有接口和具体类型上 /// /// 要注册的实例 public void RegisterPlurality(object instance); /// /// 注册系统实例,将其绑定到其所有实现的接口上 /// /// 系统实例对象 void RegisterSystem(ISystem system); /// /// 注册指定类型的实例到容器中 /// /// 要注册的实例类型 /// 要注册的实例对象,不能为null void Register(T instance); /// /// 注册指定类型的实例到容器中 /// /// 要注册的实例类型 /// 要注册的实例对象 void Register(Type type, object instance); #endregion #region Get Methods /// /// 获取单个实例(通常用于具体类型) /// 如果存在多个,只返回第一个 /// /// 期望获取的实例类型 /// 找到的第一个实例;如果未找到则返回 null T? Get() where T : class; /// /// 获取指定类型的必需实例 /// /// 期望获取的实例类型 /// 找到的唯一实例 /// 当没有注册实例或注册了多个实例时抛出 T GetRequired() where T : class; /// /// 获取指定类型的所有实例(接口 / 抽象类推荐使用) /// /// 期望获取的实例类型 /// 所有符合条件的实例列表;如果没有则返回空数组 IReadOnlyList GetAll() where T : class; /// /// 获取并排序(系统调度专用) /// /// 期望获取的实例类型 /// 比较器委托,定义排序规则 /// 按指定方式排序后的实例列表 IReadOnlyList GetAllSorted(Comparison comparison) where T : class; #endregion #region Utility Methods /// /// 检查容器中是否包含指定类型的实例 /// /// 要检查的类型 /// 如果容器中包含指定类型的实例则返回true,否则返回false bool Contains(); /// /// 判断容器中是否包含某个具体的实例对象 /// /// 待查询的实例对象 /// 若容器中包含该实例则返回true,否则返回false bool ContainsInstance(object instance); /// /// 清空容器中的所有实例 /// void Clear(); /// /// 冻结容器,防止后续修改 /// void Freeze(); #endregion }