dotnetcore/CAP · error · ArgumentNullException
Value cannot be null. (Parameter 'options')
Error message
Value cannot be null. (Parameter 'options')
What it means
The CapOptions.UseConsulDiscovery extension method throws ArgumentNullException when the options delegate is null. CAP registers a ConsulDiscoveryOptionsExtension wrapping this Action<ConsulDiscoveryOptions>, so a null delegate would break node discovery configuration later. Passing null instead of a lambda (even an empty one) always fails immediately.
Solutions
- Pass an empty lambda: UseConsulDiscovery(_ => { }).
- Guard the call: only invoke UseConsulDiscovery when a configured action exists.
- Provide real Consul settings (server address, node id/name) inside the lambda.
Example fix
// before
Action<ConsulDiscoveryOptions> configure = GetFromConfig(); // may be null
capOptions.UseConsulDiscovery(configure);
// after
capOptions.UseConsulDiscovery(configure ?? (_ => { })); Defensive patterns
Strategy: validation
Validate before calling
if (configure == null) configure = _ => { };
capOptions.UseConsulDiscovery(configure); Try / catch
try { capOptions.UseConsulDiscovery(configure); }
catch (ArgumentNullException) { capOptions.UseConsulDiscovery(_ => { }); } Prevention
- Never pass null Actions to CAP option extension methods
- Coalesce config-derived delegates with _ => { }
- Validate Consul settings (server address, node id) inside the lambda
When it happens
Trigger: Calling capOptions.UseConsulDiscovery(null) instead of passing at least an empty lambda _ => { }.
Common situations: Building options dynamically where a configuration section is missing and the code passes a null Action instead of falling back to defaults.
Related errors
- Value cannot be null. (Parameter 'topicNames')
- Value cannot be null. (Parameter 'connectionString')
- Value cannot be null. (Parameter 'topics')
- Value cannot be null. (Parameter 'configure')
- Value cannot be null. (Parameter 'options')
AI-assisted analysis of dotnetcore/CAP@e52b8508e5 (2026-09-14).
Data as JSON: /api/errors/ae730c5c682ea17a.
Report an issue: GitHub.
Appendix: source
Thrown at src/DotNetCore.CAP.Dashboard/NodeDiscovery/CAP.ConsulDiscoveryOptionsExtensions.cs:54
}
}
}
namespace Microsoft.Extensions.DependencyInjection
{
public static class CapDiscoveryOptionsExtensions
{
/// <summary>
/// Default use kubernetes as service discovery.
/// </summary>
public static CapOptions UseConsulDiscovery(this CapOptions capOptions)
{
return capOptions.UseConsulDiscovery(_ => { });
}
public static CapOptions UseConsulDiscovery(this CapOptions capOptions, Action<ConsulDiscoveryOptions> options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
capOptions.RegisterExtension(new ConsulDiscoveryOptionsExtension(options));
return capOptions;
}
}
}View on GitHub (pinned to e52b8508e5)