You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1启动前注入依赖 无法解析DbConnectionStringManager服务报错

问题解决方法

错误原因

.NET Core 3.1 中Startup类构造函数仅能注入主机默认提供的核心服务(如IConfiguration、IWebHostEnvironment),你当前在webBuilder.ConfigureServices中注册的自定义服务,在Startup实例化时还未被加载到DI容器中,因此无法解析DbConnectionStringManager实例触发报错。

解决方案

方案1:将自定义服务注册移到Host层级

把服务注册逻辑从webBuilder.ConfigureServices挪到Host层级的ConfigureServices中,这部分服务会在Startup实例化前完成注册,可直接注入到Startup构造函数:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        // 新增Host层级的服务注册,Startup构造函数可注入这里注册的服务
        .ConfigureServices(serviceCollection =>
        {
            serviceCollection.AddSingleton<AwsSecretProvider>();
            serviceCollection.AddSingleton<ConnectionStringProviderFactory>();
            serviceCollection.AddSingleton<DbConnectionStringManager>();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
                .ConfigureLogging((hostingContext, config) => { config.ClearProviders(); })
                .UseKestrel(options =>
                    {
                        options.AllowSynchronousIO = true;
                        options.Limits.MinRequestBodyDataRate = null;
                    })
                .UseIISIntegration()
                // 移除原webBuilder内的自定义服务注册
                .UseIIS()
                .UseStartup<Startup>();
        });

方案2:调整Startup的注入位置

如果不需要在Startup构造函数中使用DbConnectionStringManager,可以直接将其注入到Startup的ConfigureServices或Configure方法参数中,这两个方法执行时所有服务已完成注册,可正常解析:

// Startup类示例
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // 直接在ConfigureServices参数中注入需要的服务
    public void ConfigureServices(IServiceCollection services, DbConnectionStringManager dbConnectionStringManager)
    {
        // 后续可直接使用dbConnectionStringManager实例
        services.AddControllers();
        // 其他服务注册逻辑
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DbConnectionStringManager dbConnectionStringManager)
    {
        // 也可以在Configure方法中注入使用
        // 中间件配置逻辑
    }
}

额外校验项

确认Startup构造函数中注入的DbConnectionStringManager的命名空间,和你定义的类的命名空间完全一致,避免因类型不匹配导致解析失败。


内容的提问来源于stack exchange,提问作者Koray Durudogan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:27:03