首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RegisterTypes()方法中Web API应用程序中的Unity PerRequestLifetimeManager抛出异常

RegisterTypes()方法中Web API应用程序中的Unity PerRequestLifetimeManager抛出异常
EN

Stack Overflow用户
提问于 2018-05-14 05:45:50
回答 1查看 648关注 0票数 0

我在Web API应用程序中配置了Unity以注入依赖项,但是当我尝试向PerRequestLifetimeManager注册DbContext时,它抛出了一个异常。如果我使用默认的LifeTimeManager,它工作得很好。我已经在应用程序中添加了Unity.MVC和Unity.Webapi nuget包。以下是RegisterTypes的代码。

代码语言:javascript
复制
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")))

当我运行应用程序时,它在RegisterTypes中抛出以下异常。

Unity.Exceptions.ResolutionFailedException...

内部异常1: InvalidOperationException: PerRequestLifetimeManager只能在HTTPASP.NET的上下文中使用。导致此错误的原因是在非request.Possible应用程序上使用生存期管理器,或者在未与相应同步上下文关联的线程中使用它。

你知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 06:53:54

我想通了。正如错误消息所说,在应用程序初始化时,我试图在非Http请求上下文中注入DbContext。如果我像下面这样做,它工作得很好,而不是试图在RegisterType中为存储库配置"InjectionConstructor“。它在每次请求时都会成功地在存储库中注入一个新的DbContext实例。对于使用"PerRequestLifetimeManager“注册的类型,似乎不能使用InjectionConstructor。

代码语言:javascript
复制
 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>))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50320903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档