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

如何在ASP.NET Core 7 Web API中全局配置Dapper连接字符串?

首先明确:Dapper本身没有全局配置连接字符串的功能,它只是对IDbConnection的扩展方法,所以需要结合ASP.NET Core的依赖注入(DI)来实现你的需求,以下是两种优雅的方案:

方案一:通过DI注册IDbConnection实例

直接在Program.cs中配置SqlConnection的实例化逻辑,后续在业务类中注入IDbConnection即可使用:

  1. 在Program.cs中添加注册代码:
var builder = WebApplication.CreateBuilder(args);

// 注册IDbConnection,每次获取都是新的SqlConnection实例,自动带入连接字符串
builder.Services.AddTransient<IDbConnection>(sp => 
    new SqlConnection(builder.Configuration.GetConnectionString("MyDB")));

// 其他服务注册...
var app = builder.Build();
// ...
  1. 在业务类中注入并使用:
class Foo {
    private readonly IDbConnection _dbConnection;

    // 通过构造函数注入IDbConnection
    public Foo(IDbConnection dbConnection)
    {
        _dbConnection = dbConnection;
    }

    public async Task<int> InsertTableObject(TableObject tableObject)
    {
        using var connection = _dbConnection;
        return await connection.ExecuteAsync(
            "INSERT INTO [table_object] (name, create_at) VALUES (@Name, @CreateAt)",
            tableObject);
    }
}
方案二:注册连接工厂(更灵活)

如果需要更灵活地控制连接创建时机,可注册Func<SqlConnection>工厂:

  1. 在Program.cs中注册工厂:
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("MyDB");

// 注册连接工厂,每次调用都会生成新的SqlConnection实例
builder.Services.AddTransient<Func<SqlConnection>>(() => 
    () => new SqlConnection(connectionString));

// 其他配置...
  1. 在业务类中使用工厂:
class Foo {
    private readonly Func<SqlConnection> _connectionFactory;

    public Foo(Func<SqlConnection> connectionFactory)
    {
        _connectionFactory = connectionFactory;
    }

    public async Task<int> InsertTableObject(TableObject tableObject)
    {
        using var connection = _connectionFactory();
        return await connection.ExecuteAsync(
            "INSERT INTO [table_object] (name, create_at) VALUES (@Name, @CreateAt)",
            tableObject);
    }
}
方案三:自定义SqlConnection子类(可选)

如果偏好直接实例化连接类的方式,可以自定义一个继承SqlConnection的类,在构造函数中自动读取连接字符串:

  1. 创建自定义连接类:
public class AppSqlConnection : SqlConnection
{
    public AppSqlConnection(IConfiguration configuration) 
        : base(configuration.GetConnectionString("MyDB"))
    {
    }
}
  1. 在Program.cs注册:
builder.Services.AddTransient<AppSqlConnection>();
  1. 在业务类中注入使用:
class Foo {
    private readonly AppSqlConnection _connection;

    public Foo(AppSqlConnection connection)
    {
        _connection = connection;
    }

    public async Task<int> InsertTableObject(TableObject tableObject)
    {
        using var connection = _connection;
        return await connection.ExecuteAsync(
            "INSERT INTO [table_object] (name, create_at) VALUES (@Name, @CreateAt)",
            tableObject);
    }
}

以上方案都避免了在每个业务方法中重复书写连接字符串的逻辑,完全符合ASP.NET Core的设计规范,同时满足你"一次性配置,直接使用连接"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:01:30