internal static IEnumerable <string> ValidationErrors(this IValidatableConfigurationSetting o) { foreach (var validationError in o.Validate()) { yield return(validationError); } var settingType = o.GetType(); var properties = settingType .GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance) .Where(p => typeof(IValidatableConfigurationSetting).IsAssignableFrom(p.PropertyType)) .ToArray(); foreach (var prop in properties) { var value = (IValidatableConfigurationSetting)prop.GetValue(o); if (value == null) { yield return("Property {0} of {1} has not been provided.".FormatWith(prop.Name, settingType.Name)); continue; } foreach (var childValidationMessage in value.ValidationErrors()) { yield return(childValidationMessage); } } }
internal static void AssertConfigurationIsValid(this IValidatableConfigurationSetting configuration) { var validationErrors = configuration.ValidationErrors().ToArray(); if (validationErrors.None()) { return; } var message = string.Join(Environment.NewLine, new[] { "Bus configuration is invalid:" }.Concat(validationErrors)); throw new BusException(message); }