【问题标题】:ASP .NET MVC , Where is "context" instancedASP .NET MVC,“上下文”在哪里实例化
【发布时间】:2021-09-29 21:51:40
【问题描述】:

这是一个关于 ASP.NET MVC 是如何工作的问题。现在我试图了解控制器如何从数据库传递数据。而且我看不到“上下文”来自脚手架控制器中构造函数的 args[0] 的位置。 例如,当您从名为“item”的模型构建控制器时,您将获得 ItemsController。 StaffsConroller 的构造函数是这样的;

public ItemsController(DbContext context)
{
    _context = context
}

变量“_context”在 ItemsController 中声明。但是“上下文”在哪里实例化?

【问题讨论】:

标签: asp.net-mvc-5


【解决方案1】:

如果你使用实体框架或者在 Startup.cs 中配置依赖注入,那么 DbContext 是由依赖注入创建的。你可以研究构造函数注入。

ASP.NET Core 应用程序使用依赖注入进行配置。 可以使用 AddDbContext 将 EF Core 添加到此配置中 Startup.cs 的 ConfigureServices 方法。例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    services.AddDbContext<ApplicationDbContext>(
        options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));
}

欲了解更多详情,您可以访问以下链接:DbContext in dependency injection for ASP.NET CoreDependency injection in the controller

【讨论】:

  • 非常感谢。在 Visual Studio 本地窗口中,我发现上下文被添加为服务集合中的服务。我可以说这个实体在这个时间没有被吃掉吗?
【解决方案2】:

DbContext 通过依赖注入注入到构造函数中。

当 ItemsController 创建时(通常是每次新的 HTTP 请求到达映射到 ItemsController 操作的路由时),ASP.NET 引擎知道 ItemsController 需要一个 DbContext 并在那里实例化一个新的 DbContext。

在此处查看更多信息:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-5.0&tabs=visual-studio#dependency-injection-in-the-controller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多