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

Jam*_*xon 9 c# dependency-injection unity-container asp.net-web-api

我使用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

提前致谢.

Tyl*_*sen 12

我同意@ Steven的方法,但这并不能回答你如何解决每个请求的更一般的问题.

我建议您更改为使用UnityHierarchicalDependencyResolver,然后根据请求解析您向HierarchicalLifetimeManager注册的任何内容.

改变这个......

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

对...

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