我对 ASP.NET MVC 中的 DI 有基本的了解,但是有一个问题很困扰我。将 Dbcontext 注册为“作用域”或“瞬态”有什么区别吗?下面是一个典型的 mvc 应用程序的一些代码:
public class EmployeeController : Controller
{
private EmployeeContext _context;
public EmployeeController(EmployeeContext context)
{
_context = context;
}
public ActionResult Index()
{
return View(context.Employees.ToList());
}
...//other action methods that access context's DbSet
}
假设我们注册EmployeeContext为临时服务。运行应用程序后,应用程序将侦听任何传入的请求。假设发生了对默认 /Home/Index 的 http 请求,因此EmployeeController 需要创建一个新实例。EmployeeContextDI首先会向控制器的构造函数提供一个实例。_context也适用于所有其他操作方法,并且没有任何其他地方需要创建新EmployeeContext服务。
所以请求完成后,也会_context被处理掉。这和作用域服务不是一样的效果吗?我们打算将其注册为“瞬态”服务,最终它的工作方式就像“范围内”服务。看来我们将 Dbcontext 注册为“作用域”或“瞬态”并不重要。
一只甜甜圈
胡子哥哥
相关分类