Web Api 中的 Unity 容器 PerRequestLifetimeManager

Tal*_*umy 5 c# dependency-injection unity-container asp.net-web-api asp.net-web-api2

我有一个 WEB API 应用程序,并且使用 UnityContainer 作为我的 DI。由于我将 UnitOfWork 与实体框架结合使用,因此我想在每个请求的 UnityContainer 中注册 DataContext。我很失望地发现没有 LifeTimeManager 可以为每个请求提供新的范围。经过进一步挖掘,我发现 Unity.AspNet.Mvc 确实包含一个 PerRequestLifetimeManager。我的问题是:

  1. Unity 不包含 PerRequestLifetimeManager 是否有原因?在我看来,根据请求注册某些内容是很常见的情况。
  2. Unity.AspNet.Mvc 包含 PerRequestLifetimeManager 是否有特殊原因?
  3. 如果我在 WebApi 项目中使用 Unity.AspNet.Mvc,有什么需要了解的吗?
  4. 如果使用线程或任务,容器如何知道它属于同一个请求?

ATe*_*rry 2

  1. Unity 不包含 PerRequestLifetimeManager 是否有原因?在我看来,根据请求注册某些内容是很常见的情况。

核心库适用于.Net 项目。只有 Asp.Net 才会有Request.

Unity.AspNet.Mvc 包含 PerRequestLifetimeManager 是否有特殊原因?

与答案 1 相同。请求是一个 Asp.Net 概念。

如果我在 WebApi 项目中使用 Unity.AspNet.Mvc,有什么需要了解的吗?

没有。无论如何,您很可能只使用 PerRequestLifetimeManager。我想,当两个库相同时,Unity 开发人员认为没有必要发布 Mvc 和 WebApi 包。

如果使用线程或任务,容器如何知道它属于同一个请求?

容器只是另一个对象。.Net 框架管理从请求到请求、从线程到线程的对象。容器本身在请求开始时创建一个唯一的作用域,并在请求结束时销毁它。.Net 执行其间的所有操作。