Asp.net Unity PerRequestLifetimeManager在RegisterTypes()方法中的Web API应用程序中引发异常

Asp.net Unity PerRequestLifetimeManager在RegisterTypes()方法中的Web API应用程序中引发异常,asp.net,entity-framework,asp.net-web-api,asp.net-web-api2,unity-container,Asp.net,Entity Framework,Asp.net Web Api,Asp.net Web Api2,Unity Container,我在Web API应用程序中配置了Unity来注入依赖项,但当我尝试向PerRequestLifetimeManager注册DbContext时,它抛出了一个异常如果我使用默认的LifeTimeManager,它可以正常工作。我在应用程序中添加了Unity.MVC和Unity.Webapi nuget软件包。这是注册表类型的代码 container .AddNewExtension<Interception>() .Re

我在Web API应用程序中配置了Unity来注入依赖项,但当我尝试向PerRequestLifetimeManager注册DbContext时,它抛出了一个异常如果我使用默认的LifeTimeManager,它可以正常工作。我在应用程序中添加了Unity.MVC和Unity.Webapi nuget软件包。这是注册表类型的代码

container                
.AddNewExtension<Interception>()                
.RegisterType(typeof(DbContext), typeof(MyDbContext), "MyContext", new PerRequestLifetimeManager())                
.RegisterType(typeof(IRepository<Country>), typeof(Repository<Country>), new InjectionConstructor(container.Resolve(typeof(DbContext),"MyContext")))                
.RegisterType(typeof(IRepository<Region>), typeof(Repository<Region>), new InjectionConstructor(container.Resolve(typeof(DbContext), "MyContext")))
容器
.AddNewExtension()
.RegisterType(typeof(DbContext)、typeof(MyDbContext)、“MyContext”、新PerRequestLifetimeManager()
.RegisterType(typeof(IRepository)、typeof(Repository)、新注入构造函数(container.Resolve(typeof(DbContext)、“MyContext”))
.RegisterType(typeof(IRepository)、typeof(Repository)、新注入构造函数(container.Resolve(typeof(DbContext)、“MyContext”))
当我运行应用程序时,它在RegisterTypes中抛出以下异常

统一。例外。解决失败例外

内部异常1:InvalidOperationException: PerRequestLifetimeManager只能在HTTP的上下文中使用 请求。此错误的可能原因是使用生存期管理器 在非ASP.NET应用程序上,或在非ASP.NET应用程序的线程中使用它 与相应的同步上下文关联


知道我做错了什么吗?

我知道了。正如错误消息所说,在应用程序初始化时,我试图将DbContext注入非Http请求上下文中。如果我按照如下所示进行操作,而不尝试在RegisterType中为存储库配置“InjectionConstructor”,则效果很好。它成功地在每个请求的存储库中注入一个新的DbContext实例。似乎无法对已向“PerRequestLifetimeManager”注册的类型使用InjectionConstructor

容器
.AddNewExtension()
.RegisterType(typeof(DbContext)、typeof(MyDbContext)、“MyContext”、新PerRequestLifetimeManager()
.RegisterType(typeof(IRepository)、typeof(Repository))
.RegisterType(typeof(IRepository)、typeof(Repository))

选中此选项。答案建议使用“HierarchyCallifeTimeManager”,因为它会在每次请求后自动处理DbContext。我认为那是不对的。
 container                
.AddNewExtension<Interception>()                
.RegisterType(typeof(DbContext), typeof(MyDbContext), "MyContext", new PerRequestLifetimeManager())                
.RegisterType(typeof(IRepository<Country>), typeof(Repository<Country>))                
.RegisterType(typeof(IRepository<Region>), typeof(Repository<Region>))