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
并在父容器中解析,还是有更好的选择?