41 lines
2.0 KiB
C#
41 lines
2.0 KiB
C#
using System;
|
|||
|
|
|
||
|
|
namespace PCL.Core.App.Configuration;
|
||
|
|
|
||
|
|
#pragma warning disable CS9113 // Parameter is unread.
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 标记一个 partial 属性,以添加对应配置项并自动生成访问器。
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="key">配置键</param>
|
||
|
|
/// <param name="defaultValue">默认值</param>
|
||
|
|
/// <param name="source">配置来源</param>
|
||
|
|
/// <typeparam name="TValue">值类型</typeparam>
|
||
|
|
[AttributeUsage(AttributeTargets.Property)]
|
||
|
|
public sealed class ConfigItemAttribute<TValue>(string key, TValue? defaultValue, ConfigSource source = default) : Attribute;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 标记一个 partial 属性,以添加对应配置项并自动生成访问器。
|
||
|
|
/// <p>注意:默认值将调用指定类型的无参构造器来获取,以解决 C# attribute 在 2025 年仍然不支持隔壁 JVM 在 2015
|
||
|
|
/// 年就支持的极其先进的自定义类型参数的问题。因此,值的类型必须有公开的无参构造器,否则运行时将会抛出异常。</p>
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="key">配置键</param>
|
||
|
|
/// <param name="source">配置来源</param>
|
||
|
|
/// <typeparam name="TValue">值类型</typeparam>
|
||
|
|
[AttributeUsage(AttributeTargets.Property)]
|
||
|
|
public sealed class AnyConfigItemAttribute<TValue>(string key, ConfigSource source = default) : Attribute;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 标记一个 partial 类为配置组,以自动实现 <see cref="IConfigScope"/> 并生成对应的作用域检查方法。
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="name">组名,需符合 C# 标识符规范</param>
|
||
|
|
/// <param name="source">组级别的默认配置来源</param>
|
||
|
|
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
|
||
|
|
public sealed class ConfigGroupAttribute(string name, ConfigSource source = default) : Attribute;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 标记一个类型为 <see cref="ConfigEventRegistry"/> 的 public static 属性,以注册配置项事件。
|
||
|
|
/// </summary>
|
||
|
|
[AttributeUsage(AttributeTargets.Property)]
|
||
|
|
public sealed class RegisterConfigEventAttribute : Attribute;
|