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

XFEExtension.NetCore.AutoConfig

【DLL】自动实现配置文件的存储

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

namespace XFEExtension.NetCore.AutoConfig.Tests;

public partial class ConcurrentProfile : XFEProfile
{
    private static int saveCount;

    [ProfileProperty]
    private int value;

    [ProfileProperty]
    private ProfileList<int> numbers = [];

    [ProfileProperty]
    private ProfileDictionary<int, int> lookup = [];

    public ConcurrentProfile()
    {
        DefaultProfileOperationMode = ProfileOperationMode.Custom;
        LoadOperation = static (_, _, _, _) => null;
        SaveOperation = SaveSnapshot;
    }

    public static int SaveCount => Volatile.Read(ref saveCount);

    public static void ResetSaveCount() => Interlocked.Exchange(ref saveCount, 0);

    private static string SaveSnapshot(XFEProfile profileInstance, Dictionary<string, Type> propertyInfoDictionary, Dictionary<string, GetValueDelegate> propertyGetFuncDictionary)
    {
        Interlocked.Increment(ref saveCount);
        var currentValue = (int)(propertyGetFuncDictionary[nameof(Value)]() ?? 0);
        var currentNumbers = (ProfileList<int>)propertyGetFuncDictionary[nameof(Numbers)]()!;
        var currentLookup = (ProfileDictionary<int, int>)propertyGetFuncDictionary[nameof(Lookup)]()!;
        return string.Join('|', currentValue.ToString(CultureInfo.InvariantCulture), currentNumbers.Count.ToString(CultureInfo.InvariantCulture), currentLookup.Count.ToString(CultureInfo.InvariantCulture));
    }
}

public sealed class SerializationProfile : XFEProfile
{
    public string Name { get; set; } = string.Empty;
}