我使用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
提前致谢.
我有一个 WEB API 应用程序,并且使用 UnityContainer 作为我的 DI。由于我将 UnitOfWork 与实体框架结合使用,因此我想在每个请求的 UnityContainer 中注册 DataContext。我很失望地发现没有 LifeTimeManager 可以为每个请求提供新的范围。经过进一步挖掘,我发现 Unity.AspNet.Mvc 确实包含一个 PerRequestLifetimeManager。我的问题是:
c# dependency-injection unity-container asp.net-web-api asp.net-web-api2