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"));