gpt4 book ai didi

.net - 如何在 MVC3 Controller 中处理存储库对象

转载 作者:行者123 更新时间:2023-12-01 09:04:41 25 4
gpt4 key购买 nike

几乎我所有的 Controller 都有一个由初始化程序实例化的存储库,如下所示:

public class CompanyController : CtsController
{
ICompanyRepository _repository = new CompanyRepository();

我想尝试确保我的存储库始终得到妥善处理,尤其是当我在其中进行模拟时,我相信这里必须小心。但是,我不想总是在每个操作方法中将每个存储库调用包装在一个新的 using 循环中。

MVC3 如何处理 Controller 实例的生命周期和处置,如果我在它们上实现 Disposable 并在 Controller 的析构函数中处置我的存储库就足够了吗?

最佳答案

解决此问题的最佳方法是使用依赖注入(inject)(也称为控制反转或 IOC)和自定义 IControllerFactory,以便自动创建和处置您的存储库。这是一篇解释如何做到这一点的文章:

Dependency Injection in ASP.NET MVC: Controllers

对于 MVC3,您可能会发现一些文章建议使用 IDependencyResolver,但您应该谨慎,因为该接口(interface)没有 Release 回调并且会导致内存泄漏(取决于您决定使用哪个 IOC 容器)。

如果您是 Dependency Injection 的新手,请在网络上搜索一些有关其背后想法的文章。

如果您不想切换到使用 IOC,则可以使用覆盖 OnActionExecuted 方法并处理所有 IDisposables 的基本 Controller 。例如:

abstract class DisposingController : Controller
{
protected IList<IDisposable> Disposables;

protected DisposingController()
{
Disposables = new List<IDisposable>();
}

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
foreach (var disposable in Disposables)
{
disposable.Dispose();
}

base.OnActionExecuted(filterContext);
}
}

然后在你的 Controller 中:

var myRepository = new MyRepository();
Disposables.Add(myRepository);

关于.net - 如何在 MVC3 Controller 中处理存储库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228840/

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