Asp.net-Mvc

ASP.net MVC 控制器 - 建構子用法

  • December 18, 2010

我正在開發一個 ASP.net MVC 應用程序,並且我有一個關於為我的控制器使用建構子的問題。

我正在為我的所有數據事務使用實體框架和 linq to Entities。我需要為幾乎所有控制器操作訪問我的實體模型。當我第一次開始編寫應用程序時,我在每個 Action 方法的開頭創建一個實體對象,執行我需要的任何工作,然後返回我的結果。

我意識到我正在為每個操作方法一遍又一遍地創建相同的對象,因此我為 Entity 對象創建了一個私有成員變數,並開始在每個控制器的建構子中實例化它。現在每個方法只引用該私有成員變數來完成它的工作。

我還在質疑自己到底哪條路是對的。我想知道 A.) 哪種方法最合適?B.)在構造方法中,這些對象存在多長時間?C.) 建構子方法是否存在性能/完整性問題?

你在問正確的問題。

A. 在每個 action 方法中創建這個依賴是絕對不合適的。MVC 的主要特性之一是能夠分離關注點。通過使用這些依賴項載入您的控制器,您正在使控制器變得更厚。這些應該被注入到控制器中。依賴注入 (DI) 有多種選擇。通常,這些類型的對象可以注入到建構子或屬性中。我的偏好是建構子注入。

B. 這些對象的生命週期將由垃圾收集器決定。GC 不是確定性的。因此,如果您的對象與資源受限的服務(數據庫連接)有連接,那麼您可能需要確保自己關閉這些連接(而不是依賴 dispose)。很多時候,“生命週期”問題被分離到控制反轉 (IOC) 容器中。那裡有很多。我的偏好是Ninject。

C. 實例化成本可能是最小的。數據庫事務成本是您可能要關注的地方。您可能需要研究一個名為“工作單元”的概念。從本質上講,數據庫可以處理大於一個保存/更新操作的事務。增加事務大小可以帶來更好的數據庫性能。

希望這能讓你開始。

引用自:https://stackoverflow.com/questions/4480485