dotnetcore/CAP · error · InvalidOperationException

You must be config transport provider for…

Error message

You must be config transport provider for CAP!
==================================================================================
========   eg: services.AddCap( options => { options.UseRabbitMQ(...) }); ========
==================================================================================

What it means

Error "You must be config transport provider for CAP! ================================================================================== ======== eg: services.AddCap( options => { options.UseRabbitMQ(...) }); ======== ==================================================================================" thrown in dotnetcore/CAP.

Solutions

  1. Configure a message transport in AddCAP, e.g. services.AddCAP(options => { options.UseRabbitMQ("localhost"); }); (or UseKafka/UseAzureServiceBus/etc.).
  2. Ensure the transport extension package (e.g. DotNetCore.CAP.RabbitMQ) is installed and the corresponding Use* method is called inside the AddCAP options lambda.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/DotNetCore.CAP/Internal/IBootstrapper.Default.cs:136 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dotnetcore/CAP@e52b8508e5 (2026-09-14). Data as JSON: /api/errors/a46092f8b7e27ded. Report an issue: GitHub.

Appendix: source

Thrown at src/DotNetCore.CAP/Internal/IBootstrapper.Default.cs:136

    }

    public override async Task StopAsync(CancellationToken cancellationToken)
    {
        _cts?.Cancel();

        await base.StopAsync(cancellationToken).ConfigureAwait(false);
    }

    private void CheckRequirement()
    {
        var marker = _serviceProvider.GetService<CapMarkerService>();
        if (marker == null)
            throw new InvalidOperationException(
                "AddCap() must be added on the service collection.   eg: services.AddCap(...)");

        var messageQueueMarker = _serviceProvider.GetService<CapMessageQueueMakerService>();
        if (messageQueueMarker == null)
            throw new InvalidOperationException(
                "You must be config transport provider for CAP!" + Environment.NewLine +
                "==================================================================================" +
                Environment.NewLine +
                "========   eg: services.AddCap( options => { options.UseRabbitMQ(...) }); ========" +
                Environment.NewLine +
                "==================================================================================");

        var databaseMarker = _serviceProvider.GetService<CapStorageMarkerService>();
        if (databaseMarker == null)
            throw new InvalidOperationException(
                "You must be config storage provider for CAP!" + Environment.NewLine +
                "===================================================================================" +
                Environment.NewLine +
                "========   eg: services.AddCap( options => { options.UseSqlServer(...) }); ========" +
                Environment.NewLine +
                "===================================================================================");
    }

View on GitHub (pinned to e52b8508e5)