我在我的Web API应用程序中配置Unity以注入依赖项,但是当我尝试使用PerRequestLifetimeManager注册DbContext时它会引发异常。 如果我使用默认的LifeTimeManager ,它可以正常工作。我将Unity.MVC和Unity.Webapi nuget包添加到应用程序中。这是RegisterTypes的代码。
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:The PerRequestLifetimeManager只能在HTTP的上下文中使用 请求。此错误的可能原因是使用生命周期管理器 在非ASP.NET应用程序上,或在非线程中使用它 与适当的同步上下文相关联。
知道我在这里做错了吗?
答案 0 :(得分:0)
我明白了。就像错误消息所说的那样,我试图在应用程序初始化时在非Http Request上下文中注入DbContext。如果我按照下面的说明进行操作,它可以正常工作,而无需尝试配置&#34; InjectionConstructor&#34;在RegisterType for Repositories中。它成功地在每个请求的存储库中注入一个新的DbContext实例。似乎您不能将注入使用的注入类型注入到#34; PerRequestLifetimeManager&#34;。
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>))