mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 新增 PriorityGenerator 为标记 Priority 特性的类自动生成 IPrioritized 接口实现 - 新增 EnumExtensionsGenerator 为枚举自动生成 Is 和 IsIn 扩展方法 - 新增 LoggerGenerator 为标记 Log 特性的类自动生成日志字段 - 新增 ContextAwareGenerator 为标记 ContextAware 特性的类自动生成 IContextAware 接口实现 - 新增 CqrsHandlerRegistryGenerator 为 CQRS 处理器生成编译时注册器减少运行时反射开销
72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
// <auto-generated/>
|
||
#nullable enable
|
||
|
||
namespace TestApp;
|
||
|
||
/// <summary>
|
||
/// 为当前规则类型补充自动生成的架构上下文访问实现。
|
||
/// </summary>
|
||
partial class MyRule : global::GFramework.Core.Abstractions.Rule.IContextAware
|
||
{
|
||
private global::GFramework.Core.Abstractions.Architectures.IArchitectureContext? _context;
|
||
private static global::GFramework.Core.Abstractions.Architectures.IArchitectureContextProvider? _contextProvider;
|
||
private static readonly object _contextSync = new();
|
||
|
||
/// <summary>
|
||
/// 自动获取的架构上下文(懒加载,默认使用 GameContextProvider)
|
||
/// </summary>
|
||
protected global::GFramework.Core.Abstractions.Architectures.IArchitectureContext Context
|
||
{
|
||
get
|
||
{
|
||
var context = _context;
|
||
if (context is not null)
|
||
{
|
||
return context;
|
||
}
|
||
|
||
// 在同一个同步域内协调懒加载与 provider 切换,避免读取到被并发重置的空提供者。
|
||
lock (_contextSync)
|
||
{
|
||
_contextProvider ??= new global::GFramework.Core.Architectures.GameContextProvider();
|
||
_context ??= _contextProvider.GetContext();
|
||
return _context;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 配置上下文提供者(用于测试或多架构场景)
|
||
/// </summary>
|
||
/// <param name="provider">上下文提供者实例</param>
|
||
public static void SetContextProvider(global::GFramework.Core.Abstractions.Architectures.IArchitectureContextProvider provider)
|
||
{
|
||
lock (_contextSync)
|
||
{
|
||
_contextProvider = provider;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置上下文提供者为默认值(用于测试清理)
|
||
/// </summary>
|
||
public static void ResetContextProvider()
|
||
{
|
||
lock (_contextSync)
|
||
{
|
||
_contextProvider = null;
|
||
}
|
||
}
|
||
|
||
void global::GFramework.Core.Abstractions.Rule.IContextAware.SetContext(global::GFramework.Core.Abstractions.Architectures.IArchitectureContext context)
|
||
{
|
||
_context = context;
|
||
}
|
||
|
||
global::GFramework.Core.Abstractions.Architectures.IArchitectureContext global::GFramework.Core.Abstractions.Rule.IContextAware.GetContext()
|
||
{
|
||
return Context;
|
||
}
|
||
|
||
}
|