diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs index e540040..2ace215 100644 --- a/GFramework.Core/architecture/Architecture.cs +++ b/GFramework.Core/architecture/Architecture.cs @@ -233,7 +233,7 @@ public abstract class Architecture( // 设置日志工厂提供程序,用于创建日志记录器 LoggerFactoryResolver.Provider = Configuration.LoggerProperties.LoggerFactoryProvider; _logger = LoggerFactoryResolver.Provider.CreateLogger(GetType().Name); - _context ??= new ArchitectureContext(Container, TypeEventSystem, Configuration.LoggerProperties); + _context ??= new ArchitectureContext(Container, TypeEventSystem); GameContext.Bind(GetType(), _context); // 创建架构运行时实例 Runtime = new ArchitectureRuntime(_context); @@ -289,7 +289,7 @@ public abstract class Architecture( LoggerFactoryResolver.Provider = Configuration.LoggerProperties.LoggerFactoryProvider; // 创建日志记录器 _logger = LoggerFactoryResolver.Provider.CreateLogger(GetType().Name); - _context ??= new ArchitectureContext(Container, TypeEventSystem, Configuration.LoggerProperties); + _context ??= new ArchitectureContext(Container, TypeEventSystem); GameContext.Bind(GetType(), _context); // 创建架构运行时实例 Runtime = new ArchitectureRuntime(_context); diff --git a/GFramework.Core/architecture/ArchitectureContext.cs b/GFramework.Core/architecture/ArchitectureContext.cs index afd7274..191b456 100644 --- a/GFramework.Core/architecture/ArchitectureContext.cs +++ b/GFramework.Core/architecture/ArchitectureContext.cs @@ -3,7 +3,6 @@ using GFramework.Core.Abstractions.command; using GFramework.Core.Abstractions.events; using GFramework.Core.Abstractions.ioc; using GFramework.Core.Abstractions.model; -using GFramework.Core.Abstractions.properties; using GFramework.Core.Abstractions.query; using GFramework.Core.Abstractions.system; using GFramework.Core.Abstractions.utility; @@ -15,8 +14,7 @@ namespace GFramework.Core.architecture; /// public class ArchitectureContext( IIocContainer container, - ITypeEventSystem typeEventSystem, - LoggerProperties loggerProperties) + ITypeEventSystem typeEventSystem) : IArchitectureContext { private readonly IIocContainer _container = container ?? throw new ArgumentNullException(nameof(container)); diff --git a/GFramework.Core/events/DefaultUnRegister.cs b/GFramework.Core/events/DefaultUnRegister.cs index ddc624b..79ea0b5 100644 --- a/GFramework.Core/events/DefaultUnRegister.cs +++ b/GFramework.Core/events/DefaultUnRegister.cs @@ -8,7 +8,7 @@ namespace GFramework.Core.events; /// 注销时要执行的回调函数 public class DefaultUnRegister(Action onUnRegister) : IUnRegister { - private Action _mOnUnRegister = onUnRegister; + private Action? _mOnUnRegister = onUnRegister; /// /// 执行注销操作,调用注册的回调函数并清理引用 @@ -16,7 +16,7 @@ public class DefaultUnRegister(Action onUnRegister) : IUnRegister public void UnRegister() { // 调用注销回调函数并清理引用 - _mOnUnRegister.Invoke(); + _mOnUnRegister?.Invoke(); _mOnUnRegister = null; } } \ No newline at end of file diff --git a/GFramework.Core/events/EasyEvent.cs b/GFramework.Core/events/EasyEvent.cs index 5e4d3cf..d0b2625 100644 --- a/GFramework.Core/events/EasyEvent.cs +++ b/GFramework.Core/events/EasyEvent.cs @@ -7,7 +7,7 @@ namespace GFramework.Core.events; /// public class EasyEvent { - private Action _mOnEvent = () => { }; + private Action? _mOnEvent = () => { }; /// /// 注册事件回调函数 diff --git a/GFramework.Core/events/EasyEventGeneric.cs b/GFramework.Core/events/EasyEventGeneric.cs index 1cce0d6..4a77dd2 100644 --- a/GFramework.Core/events/EasyEventGeneric.cs +++ b/GFramework.Core/events/EasyEventGeneric.cs @@ -13,7 +13,7 @@ public class EasyEvent : IEasyEvent /// 存储已注册的事件处理委托。 /// 默认为空操作(no-op)委托,避免 null 检查。 /// - private Action _mOnEvent = e => { }; + private Action? _mOnEvent = _ => { }; /// /// 显式实现 IEasyEvent 接口中的 Register 方法。 @@ -66,14 +66,14 @@ public class EasyEvent : IEasyEvent /// 提供事件注册、注销和触发功能。 /// /// 第一个参数类型。 -/// 第二个参数类型。 -public class EasyEvent : IEasyEvent +/// 第二个参数类型。 +public class EasyEvent : IEasyEvent { /// /// 存储已注册的双参数事件处理委托。 /// 默认为空操作(no-op)委托。 /// - private Action _mOnEvent = (_, _) => { }; + private Action? _mOnEvent = (_, _) => { }; /// /// 显式实现 IEasyEvent 接口中的 Register 方法。 @@ -85,7 +85,7 @@ public class EasyEvent : IEasyEvent { return Register(Action); - void Action(T _, TK __) + void Action(T _, Tk __) { onEvent(); } @@ -96,7 +96,7 @@ public class EasyEvent : IEasyEvent /// /// 要注册的事件处理方法。 /// IUnRegister 对象,用于稍后注销该事件监听器。 - public IUnRegister Register(Action onEvent) + public IUnRegister Register(Action onEvent) { _mOnEvent += onEvent; return new DefaultUnRegister(() => { UnRegister(onEvent); }); @@ -106,7 +106,7 @@ public class EasyEvent : IEasyEvent /// 取消指定的双参数事件监听器。 /// /// 需要被注销的事件处理方法。 - public void UnRegister(Action onEvent) + public void UnRegister(Action onEvent) { _mOnEvent -= onEvent; } @@ -116,71 +116,8 @@ public class EasyEvent : IEasyEvent /// /// 第一个参数。 /// 第二个参数。 - public void Trigger(T t, TK k) + public void Trigger(T t, Tk k) { _mOnEvent?.Invoke(t, k); } -} - -/// -/// 支持三个泛型参数 T、TK 和 TS 的事件类。 -/// 提供事件注册、注销和触发功能。 -/// -/// 第一个参数类型。 -/// 第二个参数类型。 -/// 第三个参数类型。 -public class EasyEvent : IEasyEvent -{ - /// - /// 存储已注册的三参数事件处理委托。 - /// 默认为空操作(no-op)委托。 - /// - private Action _mOnEvent = (_, _, _) => { }; - - /// - /// 显式实现 IEasyEvent 接口中的 Register 方法。 - /// 允许使用无参 Action 来订阅当前带参事件。 - /// - /// 无参事件处理方法。 - /// IUnRegister 对象,用于稍后注销该事件监听器。 - IUnRegister IEasyEvent.Register(Action onEvent) - { - return Register(Action); - - void Action(T _, TK __, TS ___) - { - onEvent(); - } - } - - /// - /// 注册一个接受三个参数的事件监听器,并返回可用于取消注册的对象。 - /// - /// 要注册的事件处理方法。 - /// IUnRegister 对象,用于稍后注销该事件监听器。 - public IUnRegister Register(Action onEvent) - { - _mOnEvent += onEvent; - return new DefaultUnRegister(() => { UnRegister(onEvent); }); - } - - /// - /// 取消指定的三参数事件监听器。 - /// - /// 需要被注销的事件处理方法。 - public void UnRegister(Action onEvent) - { - _mOnEvent -= onEvent; - } - - /// - /// 触发所有已注册的事件处理程序,并传递参数 t、k 和 s。 - /// - /// 第一个参数。 - /// 第二个参数。 - /// 第三个参数。 - public void Trigger(T t, TK k, TS s) - { - _mOnEvent?.Invoke(t, k, s); - } } \ No newline at end of file diff --git a/GFramework.Core/events/EasyEvents.cs b/GFramework.Core/events/EasyEvents.cs index d8b84ce..19c03e7 100644 --- a/GFramework.Core/events/EasyEvents.cs +++ b/GFramework.Core/events/EasyEvents.cs @@ -53,7 +53,7 @@ public class EasyEvents /// 指定类型的事件实例,如果不存在则返回默认值 public T GetEvent() where T : IEasyEvent { - return _mTypeEvents.TryGetValue(typeof(T), out var e) ? (T)e : default; + return _mTypeEvents.TryGetValue(typeof(T), out var e) ? (T)e : default!; } /// diff --git a/GFramework.Core/events/OrEvent.cs b/GFramework.Core/events/OrEvent.cs index 8c5f34e..896cf26 100644 --- a/GFramework.Core/events/OrEvent.cs +++ b/GFramework.Core/events/OrEvent.cs @@ -8,12 +8,12 @@ namespace GFramework.Core.events; /// public class OrEvent : IUnRegisterList { - private Action _mOnEvent = () => { }; + private Action? _mOnEvent = () => { }; /// /// 获取取消注册列表 /// - public IList UnregisterList { get; } + public IList UnregisterList { get; } = new List(); /// /// 将指定的事件与当前OrEvent进行或逻辑组合 diff --git a/GFramework.Core/events/UnRegisterList.cs b/GFramework.Core/events/UnRegisterList.cs index 3f413c3..8eb29d9 100644 --- a/GFramework.Core/events/UnRegisterList.cs +++ b/GFramework.Core/events/UnRegisterList.cs @@ -12,7 +12,7 @@ public class UnRegisterList : IUnRegisterList /// /// 获取取消注册列表的只读属性 /// - public IList UnregisterList { get; } + public IList UnregisterList { get; } = null!; /// /// 向取消注册列表中添加一个新的可取消注册对象 diff --git a/GFramework.Core/model/AbstractModel.cs b/GFramework.Core/model/AbstractModel.cs index 8b0e4fb..aae101c 100644 --- a/GFramework.Core/model/AbstractModel.cs +++ b/GFramework.Core/model/AbstractModel.cs @@ -12,7 +12,7 @@ public abstract class AbstractModel : IModel /// /// 模型所属的架构实例 /// - protected IArchitectureContext _context { get; private set; } + protected IArchitectureContext _context { get; private set; } = null!; /// /// 初始化模型,调用抽象方法OnInit执行具体初始化逻辑 diff --git a/GFramework.Core/property/BindablePropertyUnRegister.cs b/GFramework.Core/property/BindablePropertyUnRegister.cs index 28a1fa0..2cbd06e 100644 --- a/GFramework.Core/property/BindablePropertyUnRegister.cs +++ b/GFramework.Core/property/BindablePropertyUnRegister.cs @@ -14,20 +14,25 @@ public class BindablePropertyUnRegister(BindableProperty bindableProperty, /// /// 获取或设置可绑定属性实例 /// - public BindableProperty BindableProperty { get; set; } = bindableProperty; + public BindableProperty? BindableProperty { get; set; } = bindableProperty; /// /// 获取或设置值变化时的回调函数 /// - public Action OnValueChanged { get; set; } = onValueChanged; + public Action? OnValueChanged { get; set; } = onValueChanged; /// /// 执行注销操作,取消注册值变化监听并清理引用 /// public void UnRegister() { - // 调用可绑定属性的注销方法,传入值变化回调函数 - BindableProperty.UnRegister(OnValueChanged); + // 检查两个引用都不为null时才执行注销操作 + if (BindableProperty != null && OnValueChanged != null) + { + // 调用可绑定属性的注销方法,传入值变化回调函数 + BindableProperty.UnRegister(OnValueChanged); + } + // 清理属性引用 BindableProperty = null; // 清理回调函数引用 diff --git a/GFramework.Game.Abstractions/assets/AssetCatalog.cs b/GFramework.Game.Abstractions/assets/AssetCatalog.cs index 3425829..9d89ee5 100644 --- a/GFramework.Game.Abstractions/assets/AssetCatalog.cs +++ b/GFramework.Game.Abstractions/assets/AssetCatalog.cs @@ -1,10 +1,4 @@ -namespace System.Runtime.CompilerServices -{ - // 这个类用于支持C# 9.0中的init访问器和记录类型功能 - internal static class IsExternalInit; -} - -namespace GFramework.Game.Abstractions.assets +namespace GFramework.Game.Abstractions.assets { /// /// 资源目录类,用于定义和管理游戏中的场景和资源标识符 diff --git a/GFramework.Game.Abstractions/internals/IsExternalInit.cs b/GFramework.Game.Abstractions/internals/IsExternalInit.cs new file mode 100644 index 0000000..2d050dd --- /dev/null +++ b/GFramework.Game.Abstractions/internals/IsExternalInit.cs @@ -0,0 +1,12 @@ +// IsExternalInit.cs +// This type is required to support init-only setters and record types +// when targeting netstandard2.0 or older frameworks. + +#pragma warning disable S2094 // Remove this empty class +namespace System.Runtime.CompilerServices +{ + internal static class IsExternalInit + { + } +} +#pragma warning restore S2094 \ No newline at end of file diff --git a/GFramework.Godot/GFramework.Godot.csproj b/GFramework.Godot/GFramework.Godot.csproj index b186170..3a0e22a 100644 --- a/GFramework.Godot/GFramework.Godot.csproj +++ b/GFramework.Godot/GFramework.Godot.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/GFramework.SourceGenerators/AnalyzerReleases.Unshipped.md b/GFramework.SourceGenerators/AnalyzerReleases.Unshipped.md index 76924ff..4cf23a9 100644 --- a/GFramework.SourceGenerators/AnalyzerReleases.Unshipped.md +++ b/GFramework.SourceGenerators/AnalyzerReleases.Unshipped.md @@ -3,6 +3,7 @@ ### New Rules - Rule ID | Category | Severity | Notes --------------|----------------------------------|----------|------------------------ - GF_Rule_001 | GFramework.SourceGenerators.rule | Error | ContextAwareDiagnostic \ No newline at end of file + Rule ID | Category | Severity | Notes +----------------|----------------------------------|----------|------------------------ + GF_Logging_001 | GFramework.Godot.logging | Warning | LoggerDiagnostics + GF_Rule_001 | GFramework.SourceGenerators.rule | Error | ContextAwareDiagnostic \ No newline at end of file