{"record":{"id":"d7c60c2f3610e9ed","repo":"abpframework/abp","slug":"could-not-find-an-implementation-of-typeof-iconfi","errorCode":null,"errorMessage":"Could not find an implementation of {typeof(IConfiguration).AssemblyQualifiedName} in the service collection.","messagePattern":"Could not find an implementation of (.+?) in the service collection\\.","errorType":"exception","errorClass":"AbpException","httpStatus":null,"severity":"error","filePath":"framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs","lineNumber":20,"sourceCode":"using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\nusing Microsoft.Extensions.Hosting;\nusing Volo.Abp;\n\nnamespace Microsoft.Extensions.DependencyInjection;\n\npublic static class ServiceCollectionConfigurationExtensions\n{\n    public static IServiceCollection ReplaceConfiguration(this IServiceCollection services, IConfiguration configuration)\n    {\n        return services.Replace(ServiceDescriptor.Singleton<IConfiguration>(configuration));\n    }\n\n    [NotNull]\n    public static IConfiguration GetConfiguration(this IServiceCollection services)\n    {\n        return services.GetConfigurationOrNull() ?? \n               throw new AbpException(\"Could not find an implementation of \" + typeof(IConfiguration).AssemblyQualifiedName + \" in the service collection.\");\n    }\n    \n    [CanBeNull]\n    public static IConfiguration? GetConfigurationOrNull(this IServiceCollection services)\n    {\n        var hostBuilderContext = services.GetSingletonInstanceOrNull<HostBuilderContext>();\n        if (hostBuilderContext?.Configuration != null)\n        {\n            return hostBuilderContext.Configuration as IConfigurationRoot;\n        }\n\n        return services.GetSingletonInstanceOrNull<IConfiguration>();\n    }\n}\n","sourceCodeStart":2,"sourceCodeEnd":35,"githubUrl":"https://github.com/abpframework/abp/blob/7ed43b1931b9df46a50c0c59148a18645641d0df/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs#L2-L35","documentation":"Thrown by ServiceCollectionConfigurationExtensions.GetConfiguration when no IConfiguration is resolvable from the service collection: neither a HostBuilderContext with a non-null Configuration nor a directly registered IConfiguration singleton exists. ABP's configuration access requires one of these to be present during startup.","triggerScenarios":"Calling services.GetConfiguration() outside a generic host/IHostBuilder context without manually registering an IConfiguration, or before ReplaceConfiguration/HostBuilderContext is available.","commonSituations":"Building an ABP application without the generic host (e.g. a console app that creates AbpApplication directly and forgets to register IConfiguration); unit-testing ConfigureServices in isolation without seeding configuration; calling GetConfiguration before the host builder has populated HostBuilderContext.","solutions":["Use the generic host (AbpApplicationFactory.CreateAsync with a host, or AbpApplicationCreationOptions to set configuration) so IConfiguration is wired automatically.","Manually register: services.ReplaceConfiguration(new ConfigurationBuilder().Build().AddJsonFile(...)) or services.AddObjectAccessor(hostBuilderContext).","If configuration is optional, use GetConfigurationOrNull() and handle the null.","Ensure ReplaceConfiguration is called when you supply your own IConfiguration instance."],"exampleFix":"// before — no configuration registered\nvar cfg = services.GetConfiguration();\n\n// after — register IConfiguration explicitly\nvar configuration = new ConfigurationBuilder()\n    .AddJsonFile(\"appsettings.json\", optional: true)\n    .Build();\nservices.ReplaceConfiguration(configuration);\nvar cfg = services.GetConfiguration();","handlingStrategy":"validation","validationCode":"// Use the OrNull variant and seed configuration explicitly when absent\nvar cfg = services.GetConfigurationOrNull();\nif (cfg == null)\n{\n    cfg = new ConfigurationBuilder().AddJsonFile(\"appsettings.json\", optional: true).Build();\n    services.ReplaceConfiguration(cfg);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the generic host so IConfiguration is wired automatically.","Call services.ReplaceConfiguration(myConfig) when supplying your own IConfiguration.","Use GetConfigurationOrNull() when configuration may be absent."],"tags":["configuration","dependency-injection","startup","abp-core"],"backgroundTag":null,"analyzedSha":"7ed43b1931b9df46a50c0c59148a18645641d0df","analyzedAt":"2026-08-13T16:26:11.351Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}