gpt4 book ai didi

asp.net-mvc - 注入(inject)连接字符串与 IDbConnection

转载 作者:行者123 更新时间:2023-12-02 00:18:16 25 4
gpt4 key购买 nike

注入(inject)连接字符串与 IDbConnection 实例的权衡是什么? ?

我使用 StructureMap 将各种服务注入(inject)到我的 ASP.NET MVC 应用程序中,其中大部分都需要数据库访问以进行 LINQ-to-SQL 查询。注入(inject) IDbConnection与通用连接字符串参数相比,IoC 似乎更可测试且更易于配置,但如果我没有明确地将连接包装在 using 中,我担心打开的连接会挂起。堵塞。

我应该注意什么连接池的优点或缺点?

注入(inject)的连接字符串

using (var con = new SqlConnection(InjectedConnectionString))
{
con.Execute("INSERT INTO Logs (...) VALUES (...)");
using (var db = new MyDataContext(con))
{
var records = from p in db.Products
select p;
}
}

注入(inject)的 IDbConnection
con.Execute("INSERT INTO Logs (...) VALUES (...)");
using (var db = new MyDataContext(InjectedConnection))
{
var records = from p in db.Products
select p;
}

最佳答案

任何中等复杂的 IoC 容器(结构图)的一个特性是 being able to control the lifetimes的对象。默认情况下,结构映射使用 transient 生命周期。这意味着它为每个对象图创建一个新实例。在实践中,这通常与 per-web-request 相同(除非您在代码中使用 container.GetInstance<T>() )。

通过使用结构映射注入(inject)数据库连接等宝贵资源,您可以控制它们的生存时间。单个资源可以(如果您选择)在整个 Web 请求中重复使用,或者为每次使用重新创建。

此外,这些选择(以及配置)现在已外部化到注册表中,而不是通过代码散布它们。如果您必须更改连接的创建方式,您只需查看一处。具有单一职责的类始终是首选。

就您的连接池而言,任何 IoC 容器都不会涉及连接池等细节。然而,它们确实对生命有帮助。 Structuremap 将调用 Dispose()在任何 IDisposable对象(嗯,实际上是调用它的解释器)。

编辑:同样在连接池中,每个生命周期都有自己的规则,用于处理对象的方式和时间。 Transient 依赖 CLR 来处理,但是 HttpRequestScoped在每个请求结束时确定性地处理对象。使用 HttpRequestScoped会阻止您最大化连接数。

关于asp.net-mvc - 注入(inject)连接字符串与 IDbConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com