private static void ParsingTest(Action <ISettingParser, TestClass> action) { var instanceInstance = new TestClass(); var instanceParser = new SettingParser { new Setting <string>(() => instanceInstance.StringValue), new Setting <string>(() => instanceInstance.StringValue2), new Setting <int>(() => instanceInstance.IntValue), new Setting <bool>(() => instanceInstance.BoolValue), new Setting <bool>(() => instanceInstance.FlagValue) { IsFlag = true, }, new Setting <bool>(() => instanceInstance.FlagValue2) { IsFlag = true, }, new Setting <ulong>(() => instanceInstance.UlongValue), new Setting <DateTime>(() => instanceInstance.DateTimeValue, parser: DateTime.TryParse), new CollectionSetting <string>(() => instanceInstance.CollectionStrings), }; var instanceSettings = ((ISettingParser)instanceParser).GetSettings(); Assert.AreEqual(instanceParser.Count, instanceSettings.Count); action(instanceParser, instanceInstance); var staticInstance = new TestClass(); var staticParser = new StaticSettingParser <TestClass> { new StaticSetting <TestClass, string>(x => x.StringValue), new StaticSetting <TestClass, string>(x => x.StringValue2), new StaticSetting <TestClass, int>(x => x.IntValue), new StaticSetting <TestClass, bool>(x => x.BoolValue), new StaticSetting <TestClass, bool>(x => x.FlagValue) { IsFlag = true, }, new StaticSetting <TestClass, bool>(x => x.FlagValue2) { IsFlag = true, }, new StaticSetting <TestClass, ulong>(x => x.UlongValue), new StaticSetting <TestClass, DateTime>(x => x.DateTimeValue, parser: DateTime.TryParse), new StaticCollectionSetting <TestClass, string>(x => x.CollectionStrings), }; var staticSettings = ((ISettingParser)staticParser).GetSettings(); Assert.AreEqual(staticParser.Count, staticSettings.Count); action(staticParser, staticInstance); }
/// <summary> /// Registers both the static setting parser and a try parser for it. Also freezes the parser making it unmodifiable. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parser"></param> public static void Register <T>(this StaticSettingParser <T> parser) where T : class, new() { StaticSettingParserRegistry.Instance.Register(parser); TryParserRegistry.Instance.Register <T>(TryParseUtils.TryParseStaticSetting); parser.Freeze(); }
/// <summary> /// Returns true if there are 0 needed settings. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parser"></param> /// <param name="source"></param> /// <returns></returns> public static bool AreAllSet <T>(this StaticSettingParser <T> parser, T source) where T : class => parser.GetNeededSettings(source).Count == 0;
/// <summary> /// Registers the current try parser so it can be used upon request. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parser"></param> public void Register <T>(StaticSettingParser <T> parser) where T : class => _SettingParsers[typeof(T)] = parser;