XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension

【DLL】XFE各类拓展是一个C#的DLL库,旨在优化C#代码中常用语句的使用,并提供更简洁的访问方式,同时提供Xunit测试框架,快速搭建服务器/客户端,免费ChatGPTAPI接口,免费通讯服务器,XFE下载器,新增格式等

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Reflection;

namespace XFEExtension.NetCore.ProfileExtension;

/// <summary>
/// 配置文件信息
/// </summary>
/// <param name="profileType">配置文件类型</param>
/// <param name="path">配置文件储存位置</param>
/// <param name="description">配置文件描述</param>
public class ProfileInfo(Type profileType, string path = "", string description = "")
{
    /// <summary>
    /// 配置文件类型
    /// </summary>
    public Type Profile { get; init; } = profileType;
    /// <summary>
    /// 配置文件储存位置
    /// </summary>
    public string Path { get; init; } = path == "" ? $"{((XFEProfile.ProfilesRootPath[^1] == '/' || XFEProfile.ProfilesRootPath[^1] == '\\') ? $"{XFEProfile.ProfilesRootPath}{profileType.Name}.xfe" : $"{XFEProfile.ProfilesRootPath}/{profileType.Name}.xfe")}" : path;
    /// <summary>
    /// 配置文件描述
    /// </summary>
    public string? Description { get; set; } = description;
    /// <summary>
    /// 配置文件属性列表
    /// </summary>
    public List<ProfileEntryInfo> PropertiesInfo { get; init; } = GetPropertiesWithProfileAttribute(profileType);
    internal static List<ProfileEntryInfo> GetPropertiesWithProfileAttribute(Type type)
    {
        var profileEntryList = new List<ProfileEntryInfo>();
        foreach (var propertyInfo in type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
            if (propertyInfo.GetCustomAttribute<ProfilePropertyAttribute>() is not null)
                profileEntryList.Add(new ProfileEntryInfo(propertyInfo.Name, propertyInfo));
        return profileEntryList;
    }
    /// <summary>
    /// 配置文件类型生成
    /// </summary>
    /// <param name="profileType"></param>
    public static implicit operator ProfileInfo(Type profileType) => new(profileType);
}