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

  1. Pass an empty lambda: UseConsulDiscovery(_ => { }).
  2. Guard the call: only invoke UseConsulDiscovery when a configured action exists.
  3. 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

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


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)