如何通过ASP.NET Core中的“using”打开数据库连接?

我需要访问我的ActionFilter属性中的数据库上下文。如何在不通过构造函数传递上下文的情况下做到这一点?如何通过ASP.NET Core中的“using”打开数据库连接?

简短的问题是:如何在一行中获取数据库上下文,就像我们在ASP.NET Framework中做过的那样?

回答:

正确的方法是使用依赖注入注册过滤器,然后使用ServiceFilterAttribute将过滤器放入管道中。这样,你的过滤器类型将使用依赖注入来解析,所以你可以正确地注入数据​​库上下文并像通常那样使用它。

public class MyActionFilter : IActionFilter 

{

private readonly MyDbContext _dbContext;

public MyActionFilter(MyDbContext dbContext)

{

_dbContext = dbContext;

}

public void OnActionExecuted(ActionExecutedContext context)

{

// use _dbContext here

}

public void OnActionExecuting(ActionExecutingContext context)

{ }

}

Startup.ConfigureServices注册类型:

services.AddTransient<MyActionFilter>(); 

然后使用ServiceFilterAttribute来激活它。无论是作为一个控制器上的属性或一个动作:

[ServiceFilter(typeof(MyActionFilter))] 

public class MyController : Controller

{

// …

}

或全局寄存器它像经由MvcOptions任何其他过滤器:

services.AddMvc(options => { 

options.Filters.Add(new ServiceFilterAttribute(typeof(MyActionFilter)));

});

然后,MyActionFilter将在所有需要的每个请求被解析过滤器,数据库上下文将从依赖注入容器注入适当的生命周期。

通常不推荐实例化数据库上下文(在单元测试之外)。你在ASP.NET Core中有一个依赖注入容器,所以你应该到处使用它,而不是自己维护对象的生命周期和依赖关系。

以上是 如何通过ASP.NET Core中的“using”打开数据库连接? 的全部内容, 来源链接: utcz.com/qa/261684.html

回到顶部