Files
git.stella-ops.org/src/Plugin/StellaOps.Plugin.Sdk/PluginOptionsBase.cs
2026-02-01 21:37:40 +02:00

37 lines
1.1 KiB
C#

using System.ComponentModel.DataAnnotations;
namespace StellaOps.Plugin.Sdk;
/// <summary>
/// Options base class with validation support.
/// </summary>
public abstract class PluginOptionsBase : IValidatableObject
{
/// <summary>
/// Override to add custom validation logic.
/// </summary>
/// <param name="validationContext">Validation context.</param>
/// <returns>Validation results.</returns>
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
yield break;
}
/// <summary>
/// Validates the options and throws if invalid.
/// </summary>
/// <exception cref="ValidationException">If validation fails.</exception>
public void ValidateAndThrow()
{
var context = new ValidationContext(this);
var results = new List<ValidationResult>();
if (!Validator.TryValidateObject(this, context, results, validateAllProperties: true))
{
var errors = string.Join(", ", results.Select(r => r.ErrorMessage));
throw new ValidationException($"Configuration validation failed: {errors}");
}
}
}