如何将数据库连接注入查询处理程序?
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
尝试通过将所有更新、插入、删除包装在事务中来在单个命令中执行所有逻辑。
我有一个类似于 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
尝试通过将所有更新、插入、删除包装在事务中来在单个命令中执行所有逻辑。