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;
}
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;
}