Web Api中的Unity容器PerRequestLifetimeManager

时间:2018-07-29 09:33:09

标签: c# asp.net-web-api dependency-injection asp.net-web-api2 unity-container

我有一个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. 在使用线程或任务的情况下,容器如何得知它属于同一请求?

1 个答案:

答案 0 :(得分:1)

  
      
  1. Unity不包含PerRequestLifetimeManager的原因吗?在我看来,这是一个非常普遍的情况   根据请求注册某些内容。
  2.   

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

  

Unity.AspNet.Mvc确实包含特定原因吗?   PerRequestLifetimeManager?

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

  

我是否需要知道是否在使用Unity.AspNet.Mvc   WebApi项目?

不。无论如何,您很可能只会使用PerRequestLifetimeManager。我可以想象,当两个库完全相同时,Unity的开发人员不需要发布Mvc和WebApi包。

  

在使用线程或任务的情况下,容器如何知道它   属于同一请求?

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