IGenericLocator<T>¶
- 种类:
interface - 命名空间:
Runestone.AesirArchitecture - 程序集:
Runestone.AesirArchitecture
实现接口: System.IDisposable
类型参数
T— 定位器管理的基类型,所有注册的实例必须可赋值给该类型。
声明¶
泛型定位器接口。提供按类型注册、查询与获取对象实例的契约。
备注
定位器的抽象契约,定义了注册、查询、获取与注销实例的标准接口。 GenericLocator{T} 是其默认实现,内部以 Dictionary{TKey,TValue} 存储注册关系。
注册与查询须使用相同的类型参数。若以具体类型注册(如 Register
方法¶
| 名称 | 描述 |
|---|---|
GetAllEntries() |
按注册键获取所有已注册的键值对(诊断用途)。 |
GetAll() |
按注册顺序获取所有已注册的实例。 |
Get() |
获取已注册的实例,不存在则返回 null。 |
TryGet(ref TItem) |
尝试获取已注册的实例。返回是否成功找到对应类型的注册。 |
Dispose() |
释放定位器:清空全部注册(等价于清空容器,AbstractContext{T} 的收尾即依赖此语义), 不销毁被注册的实例——实例的释放由调用方(如 Context 逆序 Dispose 模块)负责。 |
Register(Type, T) |
注册实例,以 Type 作为键。重复注册将覆盖已有实例。 |
Register(TItem) |
注册实例,以 typeof(TItem) 作为键。重复注册将覆盖已有实例。 |
Unregister() |
注销指定类型的注册。 |
GetAllEntries()¶
按注册键获取所有已注册的键值对(诊断用途)。
备注
正常查询请使用 Get{TItem} / TryGet{TItem}。 此成员服务"近失识别"类诊断——例如按实现类注册、按接口查询失败时, 需要遍历注册键值对识别"已注册实例可赋值给查询类型"的近失情况并生成提示。 与 GetAll 一致地返回调用时刻的物化快照:枚举期间修改定位器不会抛"集合已修改"异常。
返回值
| 类型 | 说明 |
|---|---|
IEnumerable<KeyValuePair<Type, T>> |
注册键 Type 与实例的键值对枚举,不保证顺序。 |
GetAll()¶
按注册顺序获取所有已注册的实例。
备注
返回调用时刻的完整快照:之后的注册/注销不影响已返回的枚举, 消费端可在枚举期间安全地修改定位器(例如模块初始化过程中动态注册新模块,不会抛"集合已修改"异常)。 与诊断成员 GetAllEntries 取同一份快照语义,两者修改安全性契约一致。
返回值
| 类型 | 说明 |
|---|---|
IEnumerable<T> |
所有已注册实例的 IEnumerable{T} 集合,不含类型键,按注册顺序排列。 |
Get()¶
获取已注册的实例,不存在则返回 null。
返回值
| 类型 | 说明 |
|---|---|
TItem |
已注册的实例;若未注册则返回 null。 |
TryGet(ref TItem)¶
尝试获取已注册的实例。返回是否成功找到对应类型的注册。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
instance |
ref TItem |
找到时输出已注册的实例;未找到时输出 null。 |
返回值
| 类型 | 说明 |
|---|---|
bool |
成功找到则返回 true;未注册则返回 false。 |
Dispose()¶
释放定位器:清空全部注册(等价于清空容器,AbstractContext{T} 的收尾即依赖此语义), 不销毁被注册的实例——实例的释放由调用方(如 Context 逆序 Dispose 模块)负责。
备注
声明为继承 IDisposable 的目的是让"清空容器"成为契约的一部分: Dispose 只持有 IGenericLocator
Register(Type, T)¶
注册实例,以 Type 作为键。重复注册将覆盖已有实例。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
type |
Type |
注册时使用的键类型,实例必须可赋值给该类型。 |
instance |
T |
要注册的实例。 |
Register(TItem)¶
注册实例,以 typeof(TItem) 作为键。重复注册将覆盖已有实例。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
instance |
TItem |
要注册的实例。 |
Unregister()¶
注销指定类型的注册。
Additional Notes¶
首个
## Additional Notes是增量生成文档标识符,请勿修改标题级别和内容!本文档由Script Doc Generator辅助生成。