【问题标题】:Right Filter For After Request Processing请求处理后的右过滤器
【发布时间】:2017-01-10 15:28:41
【问题描述】:

我正在使用身份验证过滤器来创建实体框架dbcontext 的实例,这是一个非托管资源。我将通过HttpContext.Current.Items 访问它来在控制器内部使用它。 (创建了一个基本控制器类以使该属性可用于所有控制器)。

dbcontext需要在控制器动作执行后进行处理。我可能会用 using 语句包装每个操作方法调用,但这似乎是多余的。

我可以在处理请求后使用过滤器来释放资源吗?哪种过滤器适合此目的? (问题是针对 MVC 和 Web API)

或者你会建议我正在做的完全不同的架构吗?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-web-api


    【解决方案1】:

    或者你会建议我正在做的完全不同的架构吗?

    我建议您使用依赖注入框架来处理 DbContext 生命周期的不同方法。将容器中的 DbContext 实例配置为每个 HTTP 请求的实例,以确保同一实例将自动注入到同一 HTTP 请求中需要的所有位置,并在结束时自动释放。

    大多数现代 DI 框架都支持每个请求的实例生命周期。例如,这里的 an article 说明了如何使用 Ninject 完成此操作:

    kernel.Bind<EmployeeContext>().ToSelf().InRequestScope();
    

    现在,在每个单独的操作过滤器、控制器、存储库、服务或您喜欢的任何依赖项中,都将 DbContext 作为构造函数参数,相同的实例将被注入到 HTTP 请求的边界内,这是所需的行为 - 数据库上下文应该是尽可能短的生命周期,并限制在 HTTP 请求的生命周期内。

    使用这种方法,您将 DbContext 实例的管理委托给您的 DI 框架,并且不需要使用基本控制器和其他管道代码污染您的控制器。

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 2018-11-17
      • 2013-07-15
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多