【问题标题】:How to inject database connection to query handler?如何将数据库连接注入查询处理程序?
【发布时间】:2018-02-26 02:03:12
【问题描述】:
我有一个类似于this app 的应用程序。在查询处理程序中,我使用 Dapper 来获取数据。 DI 容器是 SimpleInjector。
我应该如何在查询处理程序中注入数据库连接?在 DI 容器中注册 IDbConnection 好不好?如果我有多个数据库连接怎么办?我应该如何处置它们?查询处理程序应该是一个用于 http 请求(作用域)还是随每个请求创建(瞬态)?
【问题讨论】:
标签:
c#
dependency-injection
cqrs
simple-injector
【解决方案1】:
您可以创建DBConnectionFactory,它将创建新的连接实例。像这样
public class DBConnectionFactory {
public IDBConnection Create() {
// todo: read conn str from web.confing
// create connection
}
}
将工厂注册到 DI 容器中并将其注入到查询处理程序中。
查询处理程序的示例场景
我的建议是使用每个查询/命令的连接。避免每个请求都使用它们,当需要更新、插入、事务时,您会发现它可能非常混乱。
对于Command handlers,尝试通过将所有更新、插入、删除包装在事务中来执行单个命令中的所有逻辑。