c# - Dapper with .NET Core - 注入(inject)的 SqlConnection 生命周期/范围

标签 c# dependency-injection asp.net-core dapper

我正在使用 .NET Core 依赖注入(inject)在应用程序启动期间实例化一个 SqlConnection 对象,然后我计划将其注入(inject)到我的存储库中。 Dapper 将使用此 SqlConnection 从我的存储库实现中的数据库读取/写入数据。我将对 Dapper 使用 async 调用。

问题是:我应该将 SqlConnection 作为 transient 注入(inject)还是作为单例注入(inject)?考虑到我想使用 async 这一事实,我的想法是使用 transient,除非 Dapper 在内部实现了一些隔离容器,并且我的单例范围仍将包含在 Dapper 内部使用的任何范围内。

在使用 Dapper 时,是否有任何关于 SqlConnection 对象生命周期的建议/最佳实践?是否有任何我可能遗漏的注意事项?

提前致谢。

最佳答案

如果您将 SQL 连接作为单例提供,您将无法同时处理多个请求,除非您启用 MARS,这也有其局限性。最佳做法是使用 transient SQL 连接并确保它被正确处理。

在我的应用程序中,我将自定义 IDbConnectionFactory 传递给用于在 using 语句中创建连接的存储库。在这种情况下,存储库本身可以是单例的,以减少堆上的分配。

关于c# - Dapper with .NET Core - 注入(inject)的 SqlConnection 生命周期/范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42937942/

相关文章:

c# - netstandard1.x 和 winforms/wpf/windows - 无法加载文件或程序集 System.Runtime,版本=4.1.0.0

c# - 如何在asp.net core razor pages中实现分页

c# - asp.net mvc4 无法正确反序列化和绑定(bind)来自 json 的 Dictionary<string,List<CustomType>>

c# - WCF 服务返回 400 错误请求

c# - 对 servicestack ormlite 中的所有结果进行分页

java - Guice - 字段注入(inject)限制

c# - 简单注入(inject)器在 Owin 启动期间无法注入(inject)每个 Web API 请求注册类

asp.net-core - 如何在 Asp.net Core Web API 中为消息包内容类型启用 LZ4 压缩

c# - 使用 web.config 的角色管理提供程序?

c# - 使用简单注入(inject)器为单个 Open Generic 注册多个实现