{"record":{"id":"ea932fd2a6cbb659","repo":"MassTransit/MassTransit","slug":"busfactory","errorCode":null,"errorMessage":"busFactory","messagePattern":"busFactory","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/MassTransit/DependencyInjection/Configuration/ServiceCollectionBusConfigurator.cs","lineNumber":82,"sourceCode":"        protected ServiceCollectionBusConfigurator(IServiceCollection collection, IContainerRegistrar registrar)\n            : base(collection, registrar)\n        {\n            AddMassTransitComponents(collection);\n        }\n\n        protected Func<IBus, RequestTimeout, IClientFactory> CreateClientFactory { get; private set; } = DefaultClientFactory;\n\n        [Obsolete(\"Use 'Using[TransportName]' instead. Visit https://masstransit.io/obsolete for details.\", true)]\n        public virtual void AddBus(Func<IBusRegistrationContext, IBusControl> busFactory)\n        {\n            SetBusFactory(new RegistrationBusFactory(busFactory));\n        }\n\n        public virtual void SetBusFactory<T>(T busFactory)\n            where T : class, IRegistrationBusFactory\n        {\n            if (busFactory == null)\n                throw new ArgumentNullException(nameof(busFactory));\n\n            ThrowIfAlreadyConfigured(nameof(SetBusFactory));\n\n            this.AddSingleton(provider => Bind<IBus>.Create(CreateBus(busFactory, provider)));\n\n            this.AddSingleton(provider => provider.GetRequiredService<Bind<IBus, IBusInstance>>().Value);\n            this.AddSingleton<IReceiveEndpointConnector>(provider => provider.GetRequiredService<Bind<IBus, IBusInstance>>().Value);\n            this.AddSingleton(provider => provider.GetRequiredService<Bind<IBus, IBusInstance>>().Value.BusControl);\n            this.AddSingleton(provider => provider.GetRequiredService<Bind<IBus, IBusInstance>>().Value.Bus);\n\n            Registrar.RegisterScopedClientFactory();\n        }\n\n        public virtual void AddRider(Action<IRiderRegistrationConfigurator> configure)\n        {\n            var configurator = new ServiceCollectionRiderConfigurator(this, new DependencyInjectionRiderContainerRegistrar<IBus>(this));\n            configure?.Invoke(configurator);\n        }","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/MassTransit/MassTransit/blob/62ab339afa3bac2e9b3fe1769d0d35d7e44778e9/src/MassTransit/DependencyInjection/Configuration/ServiceCollectionBusConfigurator.cs#L64-L100","documentation":"SetBusFactory requires an IRegistrationBusFactory instance to configure how the bus is constructed from the container. Passing null cannot produce a bus factory, so the standard ArgumentNullException(nameof(busFactory)) is thrown immediately, before any DI registrations are made.","triggerScenarios":"Calling SetBusFactory(null) directly, or calling AddBus with a configure callback chain that ends up passing a null factory expression (e.g. a factory variable not yet initialized) into SetBusFactory.","commonSituations":"Hosting setups where the bus factory is obtained from configuration or a conditional branch (e.g. choosing RabbitMQ vs in-memory at runtime) and every branch fails to assign a value, so null reaches the call.","solutions":["Pass a concrete IRegistrationBusFactory, e.g. new RegistrationBusFactory(...) or the transport-specific factory from the provider package","Check the variable/expression passed for null before calling SetBusFactory","Ensure the conditional logic that selects the transport always assigns a factory (throw on the unknown-transport branch instead)"],"exampleFix":"// before\nIRegistrationBusFactory factory = SelectFactory(config); // may return null\nconfigurator.SetBusFactory(factory);\n\n// after\nvar factory = SelectFactory(config) ?? throw new InvalidOperationException(\"No transport configured\");\nconfigurator.SetBusFactory(factory);","handlingStrategy":"validation","validationCode":"if (busFactory == null)\n    throw new InvalidOperationException(\"busFactory must be provided before calling SetBusFactory\");","typeGuard":"IRegistrationBusFactory f = maybeFactory ?? throw new InvalidOperationException(\"Missing bus factory\");","tryCatchPattern":"try { configurator.SetBusFactory(factory); }\ncatch (ArgumentNullException ex) { logger.LogError(ex, \"Bus factory was null\"); throw; }","preventionTips":["Null-check factories returned from transport-selection code","Prefer passing factory construction directly inline rather than through variables"],"tags":["masstransit","null-argument","configuration","dependency-injection"],"backgroundTag":"null-argument","analyzedSha":"62ab339afa3bac2e9b3fe1769d0d35d7e44778e9","analyzedAt":"2026-09-13T22:47:47.593Z","contentChangedAt":"2026-09-13T22:47:47.593Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}