37 lines
1.1 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|