0

我想知道谁调用/创建了PageModel派生类的构造函数(在我的例子中IndexModel)。在我看来,通过对剃刀页面的每个请求,提供给RazorPage通过的类@model被实例化,还想知道谁提供构造函数参数上下文,即 EF 上下文:

public IndexModel(RazorPagesMovie.Models.RazorPagesMovieContext context)
{
    _context = context;
}
4

1 回答 1

3

ASP.NET 中的依赖注入 (DI) 框架负责创建您的IndexModel.

DI 创建实例并提供已在启动时注册到服务提供者的参数类ConfigureServices()

请求时会发生什么,是

  • ASP.NETIndexModel通过询问 DI 来创建你的。这与调用基本相同services.GetService<IndexModel>()。您的页面模型已自动为您注册到 DI 容器
  • 无论你的IndexModel构造函数有什么参数(可以有你需要的参数),只要它们已经被注册,就会被 DI 填充。如果有任何未注册的类型作为参数,则抛出异常

在这种情况下,如果您列出的代码有效,那么您RazorPagesMovieContextConfigureServices().

阅读有关 asp.net 核心中 DI 的更多信息:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2

还要注意关于服务寿命的部分。

于 2019-08-11T06:20:43.480 回答