mirror of
https://github.com/MewoLab/AquaDX.git
synced 2026-02-11 08:17:26 +08:00
[RF] AquaMai configuration refactor (#82)
更新了配置文件格式,原有的配置文件将被自动无缝迁移,详情请见新的配置文件中的注释(例外:`SlideJudgeTweak` 不再默认启用) 旧配置文件将被重命名备份,如果更新到此版本遇到 Bug 请联系我们 Updated configuration file schema. The old config file will be migrated automatically and seamlessly. See the comments in the new configuration file for details. (Except for `SlideJudgeTweak` is no longer enabled by default) Your old configuration file will be renamed as a backup. If you encounter any bug with this version, please contact us.
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using AquaMai.Config.Interfaces;
|
||||
|
||||
namespace AquaMai.Config.Reflection;
|
||||
|
||||
public class SystemReflectionProvider(Assembly assembly) : IReflectionProvider
|
||||
{
|
||||
public class ReflectionField(FieldInfo field) : IReflectionField
|
||||
{
|
||||
public FieldInfo UnderlyingField { get; } = field;
|
||||
|
||||
public string Name => UnderlyingField.Name;
|
||||
public Type FieldType => UnderlyingField.FieldType;
|
||||
public T GetCustomAttribute<T>() where T : Attribute => UnderlyingField.GetCustomAttribute<T>();
|
||||
public object GetValue(object obj) => UnderlyingField.GetValue(obj);
|
||||
public void SetValue(object obj, object value) => UnderlyingField.SetValue(obj, value);
|
||||
}
|
||||
|
||||
public class ReflectionType(Type type) : IReflectionType
|
||||
{
|
||||
public Type UnderlyingType { get; } = type;
|
||||
|
||||
public string FullName => UnderlyingType.FullName;
|
||||
public string Namespace => UnderlyingType.Namespace;
|
||||
public T GetCustomAttribute<T>() where T : Attribute => UnderlyingType.GetCustomAttribute<T>();
|
||||
public IReflectionField[] GetFields(BindingFlags bindingAttr) => Array.ConvertAll(UnderlyingType.GetFields(bindingAttr), f => new ReflectionField(f));
|
||||
}
|
||||
|
||||
public Assembly UnderlyingAssembly { get; } = assembly;
|
||||
|
||||
public IReflectionType[] GetTypes() => Array.ConvertAll(UnderlyingAssembly.GetTypes(), t => new ReflectionType(t));
|
||||
|
||||
public Dictionary<string, object> GetEnum(string enumName)
|
||||
{
|
||||
var enumType = UnderlyingAssembly.GetType(enumName);
|
||||
if (enumType == null) return null;
|
||||
var enumValues = Enum.GetValues(enumType);
|
||||
var enumDict = new Dictionary<string, object>();
|
||||
foreach (var enumValue in enumValues)
|
||||
{
|
||||
enumDict.Add(enumValue.ToString(), enumValue);
|
||||
}
|
||||
return enumDict;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user