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

ASP.NET Core中如何为控制器提供连接字符串(避免直接注入IConfiguration)

解决方案:用选项模式为控制器提供连接字符串

针对你遇到的问题,推荐使用ASP.NET Core官方推荐的选项模式来管理连接字符串,既避免直接注入IConfiguration,又能优雅实现配置的依赖注入。

步骤1:定义强类型配置类

创建一个强类型类来封装数据库配置,替代原有的DBUtils:

public class DbSettings
{
    public string DBConnectionString { get; set; }
}

步骤2:在Startup中配置并注册服务

在ConfigureServices方法中绑定配置,并将配置类注册到依赖注入容器:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        // 绑定appsettings中的配置到DbSettings
        services.Configure<DbSettings>(Configuration.GetSection("DbSettings"));
        
        // 可选:注册DbSettings为单例,方便直接注入(而非IOptions<DbSettings>)
        services.AddSingleton(provider => 
            provider.GetRequiredService<IOptions<DbSettings>>().Value);

        services.AddControllers();
    }
}

步骤3:在appsettings.json中添加配置节点

确保配置文件中包含对应的连接字符串节点:

{
  "DbSettings": {
    "DBConnectionString": "你的数据库连接字符串内容"
  }
}

步骤4:在控制器中注入使用

直接在控制器构造函数中注入DbSettings或IOptions<DbSettings>:

public class CommonController : ControllerBase
{
    private readonly string _conStr;

    // 方式1:直接注入DbSettings单例
    public CommonController(DbSettings dbSettings)
    {
        _conStr = dbSettings.DBConnectionString;
    }

    // 方式2:官方推荐的IOptions注入(支持配置重载)
    // public CommonController(IOptions<DbSettings> dbSettings)
    // {
    //     _conStr = dbSettings.Value.DBConnectionString;
    // }

    public IActionResult GetData() 
    {
        // 使用using确保数据库连接自动释放
        using (SqlConnection connection = new SqlConnection(_conStr))
        {
            connection.Open();
            // 执行数据库查询等操作
            return Ok();
        }
    }
}

补充:如果坚持使用原DBUtils类

若想保留原DBUtils,可以在注册单例时手动传入连接字符串:

services.AddSingleton<DBUtils>(new DBUtils(Configuration.GetConnectionString("DefaultConnection")));

但这种方式灵活性不足,选项模式仍是更规范的解决方案。

内容的提问来源于stack exchange,提问作者MSBI-Geek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:41:03