gpt4 book ai didi

c# - 何时在 ASP.NET MVC 中实例化 EF4 上下文?

转载 作者:行者123 更新时间:2023-11-30 19:31:41 25 4
gpt4 key购买 nike

我找到了 a tutorial in microsoft asp.net website ,从这样的上下文中创建一个实例:

        public class HomeController : Controller
{
private MoviesDBEntities _db = new MoviesDBEntities();

public ActionResult Index()
{
return View(_db.MovieSet.ToList());
}

...
}

这意味着每次 Controller 实例化时,上下文也会被实例化。但是Here我发现实例化上下文的正确方法是这样的:

        public class HomeController : Controller
{
public ActionResult Index()
{
using(MoviesDBEntities _db = new MoviesDBEntities()){
return View(_db.MovieSet.ToList());
}
}
...
}

所以问题是,哪种方式是正确的?还是它根本不重要?

最佳答案

一般来说,一个类不应该负责实例化它自己的依赖。

最好的办法是将依赖项传递给构造函数:-

public class HomeController : Controller
{
private IMovieRepository _db;
public HomeController(IMovieRepository db)
{
_db = db;
}

public ActionResult Index()
{
return View(_db.MovieSet.ToList());
}
}

这称为“依赖注入(inject)”,它是可取的,因为它减少了样板代码,并且还允许您在运行时提供其他 IMovieRepository 实现(例如,如果您正在进行单元测试)。

ASP.NET MVC 有一个钩子(Hook)可以让你做到这一点 (ControllerBuilder),但幸运的是你不需要自己动手,那里有预制的解决方案。我推荐http://ninject.org/因为它很容易设置。

这样一来,您的 IoC 容器(无论传递依赖项的是什么)只能为每个 HTTP 请求实例化一个上下文,并在请求结束时处理它。

查看例如What is Inversion of Control?

关于c# - 何时在 ASP.NET MVC 中实例化 EF4 上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6703597/

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