{"record":{"id":"3311f7aa1aad87c0","repo":"LuckyPennySoftware/MediatR","slug":"no-assemblies-found-to-scan-supply-at-least-one-a","errorCode":null,"errorMessage":"No assemblies found to scan. Supply at least one assembly to scan for handlers.","messagePattern":"No assemblies found to scan\\. Supply at least one assembly to scan for handlers\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/MediatR/MicrosoftExtensionsDI/MediatRServiceCollectionExtensions.cs","lineNumber":51,"sourceCode":"        var serviceConfig = new MediatRServiceConfiguration();\n\n        configuration.Invoke(serviceConfig);\n\n        return services.AddMediatR(serviceConfig);\n    }\n    \n    /// <summary>\n    /// Registers handlers and mediator types from the specified assemblies\n    /// </summary>\n    /// <param name=\"services\">Service collection</param>\n    /// <param name=\"configuration\">Configuration options</param>\n    /// <returns>Service collection</returns>\n    public static IServiceCollection AddMediatR(this IServiceCollection services, \n        MediatRServiceConfiguration configuration)\n    {\n        if (!configuration.AssembliesToRegister.Any())\n        {\n            throw new ArgumentException(\"No assemblies found to scan. Supply at least one assembly to scan for handlers.\");\n        }\n\n        ServiceRegistrar.SetGenericRequestHandlerRegistrationLimitations(configuration);\n\n        ServiceRegistrar.AddMediatRClassesWithTimeout(services, configuration);\n\n        ServiceRegistrar.AddRequiredServices(services, configuration);\n\n        return services;\n    }\n    \n    internal static void CheckLicense(this IServiceProvider serviceProvider)\n    {\n        if (LicenseChecked)\n        {\n            return;\n        }\n","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/LuckyPennySoftware/MediatR/blob/916ef1b3d68ccdc96db8f914eaf1b32fc7db52c5/src/MediatR/MicrosoftExtensionsDI/MediatRServiceCollectionExtensions.cs#L33-L69","documentation":"AddMediatR(MediatRServiceConfiguration) requires at least one assembly to scan for handlers. The guard checks configuration.AssembliesToRegister and throws ArgumentException with a clear message if empty, preventing a silent no-op registration that would later surface as unresolved handlers.","triggerScenarios":"Building a MediatRServiceConfiguration and calling AddMediatR(cfg) without ever calling RegisterServicesFromAssembly*, RegisterServicesFromAssemblies, or RegisterServicesFromAssemblyContaining<T>.","commonSituations":"Calling cfg.AddMediatR() with the parameterless builder then AddMediatR(cfg); using AddMediatR(cfg) where cfg was constructed manually without assembly registration; ordering mistake where assembly registration is commented out during refactor.","solutions":["Add `cfg.RegisterServicesFromAssemblyContaining<Startup>()` (or FromAssembly(typeof(...).Assembly)) before AddMediatR(cfg).","Prefer the assembly-accepting AddMediatR overloads (e.g. services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(assembly))) which make the dependency explicit.","Assert configuration.AssembliesToRegister.Count > 0 in a startup test."],"exampleFix":"// before\nvar cfg = new MediatRServiceConfiguration();\nservices.AddMediatR(cfg); // ArgumentException\n// after\nvar cfg = new MediatRServiceConfiguration();\ncfg.RegisterServicesFromAssemblyContaining<Startup>();\nservices.AddMediatR(cfg);","handlingStrategy":"validation","validationCode":"if (configuration.AssembliesToRegister.Count == 0)\n    throw new InvalidOperationException(\"Register at least one assembly before AddMediatR.\");","typeGuard":"static bool HasAssemblies(MediatRServiceConfiguration c) => c.AssembliesToRegister.Count > 0;","tryCatchPattern":null,"preventionTips":["Always call RegisterServicesFromAssemblyContaining<T> / RegisterServicesFromAssembly before AddMediatR(cfg).","Prefer assembly-accepting AddMediatR overloads that make the dependency explicit.","Add a startup test asserting AssembliesToRegister is non-empty."],"tags":["di","registration","configuration","assemblies","startup"],"backgroundTag":null,"analyzedSha":"916ef1b3d68ccdc96db8f914eaf1b32fc7db52c5","analyzedAt":"2026-08-13T17:57:04.476Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}