Unity DI和自定义Owin中间件

时间:2015-07-15 13:00:51

标签: c# asp.net-web-api unity-container asp.net-identity owin

Custom Owin中间件最终需要针对数据库验证凭据,但我找不到通过DI从中间件获取存储库实例或Asp.Net Identity UserManager的方法。

不幸的是,我的数据库驱动程序是一个全局单例,应该由配置的Unity容器解析。调试时,会在调用中间件后创建请求的Unity子容器。

有没有办法在中间件中解析与Unity的依赖关系?

我尝试了这个没有成功,但无论如何命名空间似乎都是错误的(System.Web.Mvc vs System.Web.Http)

var userManager = DependencyResolver.Current.GetService<ApplicationUserManager>();

似乎Autofac通过将请求范围创建为中间件本身来解决这个问题。 Unity怎么样?

更新

这有效

var userManager = (ApplicationUserManager)GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(ApplicationUserManager));

但是,稍后会创建子容器(IDependencyResolver的BeginScope)。我使用HierarchicalLifetimeManager注册了UserManager,这可能意味着它解析了父容器中的单个实例,后续请求获得了相同的实例。

什么更安全,使用TransientLifetimeManager并在父容器中解析,还是有更好的选择?

0 个答案:

没有答案