如何将数据库连接注入查询处理程序?

How to inject database connection to query handler?

我有一个类似于 this app 的应用程序。在查询处理程序内部,我使用 Dapper 获取数据。 DI 容器是 SimpleInjector。

我应该如何在查询处理程序中注入数据库连接?在DI容器中注册IDbConnection好不好?如果我有多个数据库连接怎么办?我应该如何处理它们?查询处理程序应该是针对 http 请求的(范围内的)还是随每个请求创建的(瞬态的)?

您可以创建 DBConnectionFactory,这将创建新的连接实例。像这样

public class DBConnectionFactory {
    public IDBConnection Create() { 
        // todo: read conn str from web.confing
        // create connection
    }
}

将工厂注册到 DI 容器并将其注入查询处理程序。

查询处理程序的示例场景

  • 从工厂创建连接
  • 使用连接执行查询
  • 处理连接

我的建议是针对每个查询/命令使用连接。避免在每个请求中使用它们,当需要更新、插入、事务时,你会发现它会非常混乱。

对于 Command handlers 尝试通过将所有更新、插入、删除包装在事务中来在单个命令中执行所有逻辑。