diff --git a/Pilz.Configuration/ISettingsIdentifier.cs b/Pilz.Configuration/ISettingsIdentifier.cs index 2794f49..1d862e1 100644 --- a/Pilz.Configuration/ISettingsIdentifier.cs +++ b/Pilz.Configuration/ISettingsIdentifier.cs @@ -2,5 +2,7 @@ public interface ISettingsIdentifier { +#if NET8_0_OR_GREATER static abstract string Identifier { get; } +#endif } diff --git a/Pilz.Configuration/Pilz.Configuration.csproj b/Pilz.Configuration/Pilz.Configuration.csproj index 420960d..fe0aa98 100644 --- a/Pilz.Configuration/Pilz.Configuration.csproj +++ b/Pilz.Configuration/Pilz.Configuration.csproj @@ -1,13 +1,13 @@  - net8.0 + net8.0;netstandard2.0 latest disable - 3.2.6 + 3.2.7 diff --git a/Pilz.Configuration/Settings.cs b/Pilz.Configuration/Settings.cs index 5150e07..9209bb8 100644 --- a/Pilz.Configuration/Settings.cs +++ b/Pilz.Configuration/Settings.cs @@ -18,7 +18,7 @@ public class Settings : ISettings public virtual T Get() where T : ISettingsNode, ISettingsIdentifier { // Find existing one - if (settings.TryGetValue(T.Identifier, out var valueExisting) && valueExisting is T settingsExisting) + if (settings.TryGetValue(GetIdentifier(), out var valueExisting) && valueExisting is T settingsExisting) return settingsExisting; // Create new & reset @@ -27,11 +27,11 @@ public class Settings : ISettings else { settingsNew = default; - Logger.WarnFormat("Not able to create new settings node instance {0}.", T.Identifier); + Logger.WarnFormat("Not able to create new settings node instance {0}.", GetIdentifier()); } // Try deserialize - if (settingsJson.TryGetValue(T.Identifier, out var valueRaw)) + if (settingsJson.TryGetValue(GetIdentifier(), out var valueRaw)) { var serializer = JsonSerializer.CreateDefault(serializerSettings); @@ -41,7 +41,7 @@ public class Settings : ISettings try { serializer.Populate(valueRaw.CreateReader(), settingsNew); - Logger.InfoFormat("Populated settings node {0}.", T.Identifier); + Logger.InfoFormat("Populated settings node {0}.", GetIdentifier()); } catch (Exception ex) { @@ -55,7 +55,7 @@ public class Settings : ISettings try { settingsNew = settingsDeserialized; - Logger.WarnFormat("Deserialied settings node {0} via fallback variant.", T.Identifier); + Logger.WarnFormat("Deserialied settings node {0} via fallback variant.", GetIdentifier()); } catch (Exception ex) { @@ -66,7 +66,7 @@ public class Settings : ISettings // Remember if (settingsNew != null) - settings[T.Identifier] = settingsNew; + settings[GetIdentifier()] = settingsNew; // Return return settingsNew; @@ -86,8 +86,7 @@ public class Settings : ISettings foreach (var kvp in settings) { var raw = JObject.FromObject(kvp.Value, serializer); - if (!settingsJson.TryAdd(kvp.Key, raw)) - settingsJson[kvp.Key] = raw; + settingsJson[kvp.Key] = raw; } var objList = new JObject(); @@ -130,4 +129,15 @@ public class Settings : ISettings jsonSerializer.Serialize(jTokenWriter, o, o.GetType()); return jTokenWriter.Token; } + + + + protected static string GetIdentifier() where T : ISettingsIdentifier + { +#if NET8_0_OR_GREATER + return T.Identifier; +#else + return typeof(T).GetProperty("Identifier", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).GetValue(null) as string; +#endif + } } \ No newline at end of file