gpt4 book ai didi

asp.net-mvc-3 - 应该(如果是的话应该如何)将数据库上下文依赖注入(inject)到 Controller 中?

转载 作者:行者123 更新时间:2023-12-02 04:09:56 24 4
gpt4 key购买 nike

似乎我正在编写的至少 90% 以上的 Controller 操作都需要访问数据库。对我来说,自动注入(inject)数据库上下文似乎是一个合乎逻辑的步骤。

我以前从未使用过依赖注入(inject),所以我想确认这是一种模式。如果是,我应该怎么做?我知道 ASP.NET MVC 3 具有“改进的依赖注入(inject)”支持,但我还需要外部框架吗?如果是这样,默认值是什么,我如何配置它来为每个 http 请求创建一个新的数据库上下文?

最佳答案

ASP.NET MVC 3 没有改进的 DI 支持 - 它改进了对 Service Locator anti-pattern 的支持(去搞清楚)。幸运的是,它通过 IControllerFactory 接口(interface)从 MVC 1 开始支持 DI。

然而,要回答这个问题,是的,注入(inject) Repository 听起来很正常。进入 Controller (尽管通常我们会在两者之间滑动一个域模型)。

最好使用 构造函数注入(inject) 像这样:

public class MyController
{
private readonly IMyRepository repository;

public MyController(IMyRepository repository)
{
if (repository == null)
{
throw new ArgumentNullException("repository");
}

this.repository = repository;
}

public ViewResult MyAction(int barId)
{
var bar = this.repository.SelectBar(barId);
return this.View(bar);
}
}

您需要提供一个自定义 IControllerFactory 来启用 MVC 框架的构造函数注入(inject) - 最简单的方法是从 DefaultControllerFactory 派生。

一旦你有一个自定义的 IControllerFactory,你可以像这样在 Global.asax 中注册它:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

关于asp.net-mvc-3 - 应该(如果是的话应该如何)将数据库上下文依赖注入(inject)到 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780357/

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