using System.Globalization; namespace XFEExtension.NetCore.AutoConfig.Tests; public partial class ConcurrentProfile : XFEProfile { private static int saveCount; [ProfileProperty] private int value; [ProfileProperty] private ProfileList numbers = []; [ProfileProperty] private ProfileDictionary 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 propertyInfoDictionary, Dictionary propertyGetFuncDictionary) { Interlocked.Increment(ref saveCount); var currentValue = (int)(propertyGetFuncDictionary[nameof(Value)]() ?? 0); var currentNumbers = (ProfileList)propertyGetFuncDictionary[nameof(Numbers)]()!; var currentLookup = (ProfileDictionary)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; }