如何通过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