From 145d2668e2d476f9b33ccf43746fd3ace92a8c09 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 1 Jun 2026 23:07:46 -0400 Subject: [PATCH] fix: wire ValidateOnStart for ScadaBridge HealthMonitoring + Cluster options (fail-fast at startup) --- .../SiteServiceRegistration.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ZB.MOM.WW.ScadaBridge.Host/SiteServiceRegistration.cs b/src/ZB.MOM.WW.ScadaBridge.Host/SiteServiceRegistration.cs index 564d2a6d..dd400206 100644 --- a/src/ZB.MOM.WW.ScadaBridge.Host/SiteServiceRegistration.cs +++ b/src/ZB.MOM.WW.ScadaBridge.Host/SiteServiceRegistration.cs @@ -105,10 +105,16 @@ public static class SiteServiceRegistration public static void BindSharedOptions(IServiceCollection services, IConfiguration config) { services.Configure(config.GetSection("ScadaBridge:Node")); - services.Configure(config.GetSection("ScadaBridge:Cluster")); + // Bind + eagerly validate: ClusterOptionsValidator is registered (TryAddEnumerable) + // by the ClusterInfrastructure module, so chaining ValidateOnStart() here makes a bad + // ScadaBridge:Cluster section fail fast at host build instead of lazily on first resolve. + services.AddOptions().Bind(config.GetSection("ScadaBridge:Cluster")).ValidateOnStart(); services.Configure(config.GetSection("ScadaBridge:Database")); services.Configure(config.GetSection("ScadaBridge:Communication")); - services.Configure(config.GetSection("ScadaBridge:HealthMonitoring")); + // Bind + eagerly validate: HealthMonitoringOptionsValidator is registered (TryAddEnumerable) + // by the HealthMonitoring module, so chaining ValidateOnStart() here makes a bad + // ScadaBridge:HealthMonitoring section fail fast at host build instead of lazily on first resolve. + services.AddOptions().Bind(config.GetSection("ScadaBridge:HealthMonitoring")).ValidateOnStart(); services.Configure(config.GetSection("ScadaBridge:Notification")); services.Configure(config.GetSection("ScadaBridge:Logging"));