gpt4 book ai didi

asp.net-mvc - ASP.net MVC Controller - 构造函数的使用

转载 作者:行者123 更新时间:2023-12-01 16:13:57 24 4
gpt4 key购买 nike

我正在开发 ASP.net MVC 应用程序,并且有一个关于为 Controller 使用构造函数的问题。

我正在使用 Entity Framework 和 linq to Entities 来处理所有数据事务。我需要访问我的实体模型来执行几乎所有 Controller 操作。当我第一次开始编写应用程序时,我在每个 Action 方法的开头创建一个实体对象,执行我需要的任何工作,然后返回结果。

我意识到我正在为每个操作方法一遍又一遍地创建相同的对象,因此我为实体对象创建了一个私有(private)成员变量,并开始在每个 Controller 的构造函数中实例化它。现在,每个方法仅引用该私有(private)成员变量来完成其工作。

我仍在质疑自己哪种方式是正确的。我想知道 A.) 哪种方法最合适? B.) 在构造函数方法中,这些对象的生命周期有多长? C.) 构造函数方法是否存在性能/完整性问题?

最佳答案

您提出了正确的问题。

A.在每个操作方法中创建这种依赖关系绝对是不合适的。 MVC 的主要功能之一是能够分离关注点。通过加载具有这些依赖项的 Controller ,您可以使 Controller 变得更厚。这些应该被注入(inject)到 Controller 中。依赖注入(inject) (DI) 有多种选项。通常,这些类型的对象可以注入(inject)构造函数或属性中。我的偏好是构造函数注入(inject)。

B.这些对象的生命周期将由垃圾收集器确定。 GC 不是确定性的。因此,如果您的对象与资源受限服务(数据库连接)有连接,那么您可能需要确保自己关闭这些连接(而不是依赖于 dispose)。很多时候,“生命周期”问题被分离到控制反转 (IOC) 容器中。那里有很多。我的偏好是 Ninject。

C.实例化成本可能是最小的。数据库事务成本是您可能需要关注的地方。您可能需要研究一个称为“工作单元”的概念。本质上,数据库可以处理比一次保存/更新操作更大的事务。增加事务大小可以带来更好的数据库性能。

希望这能让您开始。

关于asp.net-mvc - ASP.net MVC Controller - 构造函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480485/

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