相关疑难解决方法(0)

在Web API中使用Handler并根据请求解析Unity

我使用Unity作为我的IoC框架,我正在基于处理程序中每个请求的标头中的值创建一个类型:

var container = new UnityContainer();

container.RegisterType<IFoo,Foo>(new InjectionConstructor(valuefromHeader));

GlobalConfiguration.Configuration.DependencyResolver = 
    new Unity.WebApi.UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

问题是处理程序SendAsync意味着全局容器被不同的请求覆盖,并且在构造函数中使用IFoo的控制器得到错误的值.

1)我可以使SendAsync同步吗?2)如果没有,如何为每个请求创建不同的实例并让IoC容器安全解析?

我查看了以下文章但没有成功:

http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver http://www.strathweb.com/2012/11/asp-net-web-api -and-dependencies-in-request-scope/ http://benfoster.io/blog/per-request-dependencies-in-aspnet-web-api-using-structuremap

提前致谢.

c# dependency-injection unity-container asp.net-web-api

9
推荐指数
1
解决办法
1万
查看次数

Web Api 中的 Unity 容器 PerRequestLifetimeManager

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

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

5
推荐指数
1
解决办法
2766
查看次数