【发布时间】:2023-03-23 07:15:01
【问题描述】:
如果我从项目中删除 DI 库,则使用 owin、webapi、mvc 和 DI (SimpleInjector) 的新 asp.net mvc 项目运行良好。但是,一旦引入,应用程序在为 DI 注册 OWIN 组件时就会崩溃。 OWIN 启动配置正在被命中并正常运行,但是在注册依赖项时(如下所列)我收到以下错误:
Microsoft.Owin.Host.SystemWeb.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:在上下文中找不到 owin.Environment 项。
SimpleInjector 注册码:
container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>());
container.RegisterPerWebRequest<HttpContextBase>(() => new HttpContextWrapper(HttpContext.Current));
// app fails on call to line below...
container.RegisterPerWebRequest(() => container.GetInstance<HttpContextBase>().GetOwinContext());
container.RegisterPerWebRequest(() => container.GetInstance<IOwinContext>().Authentication);
container.RegisterPerWebRequest<DbContext, ApplicationDbContext>();
更新 - 全栈跟踪
在 System.Web.HttpContextBaseExtensions.GetOwinContext(HttpContextBase 上下文)在 WebApplication1.App_Start.SimpleInjectorInitializer.c__DisplayClass6.b__2() 在 b:\temp\WebApplication1\WebApplication1\App_Start\SimpleInjectorInitializer.cs:line 41 at lambda_method(Closure) at SimpleInjector.Scope.CreateAndCacheInstance[TService,TImplementation](ScopedRegistration
2 registration) at SimpleInjector.Scope.GetInstance[TService,TImplementation](ScopedRegistration2 注册)在 SimpleInjector.Scope.GetInstance[TService,TImplementation](ScopedRegistration2 registration, Scope scope) at SimpleInjector.Advanced.Internal.LazyScopedRegistration2.GetInstance(Scope 范围)在 lambda_method(闭包)在 SimpleInjector.InstanceProducer.GetInstance()
【问题讨论】:
-
你能发布完整的堆栈跟踪吗?
-
它在
container.Verify()这一点上失败了吗? -
依赖注册失败。这是行:container.RegisterPerWebRequest(() => container.GetInstance
().Authentication); -
我认为不需要注册 IOwinContext。您在哪里依赖 OwinContext 注入另一个类。如果可能的话,不要直接注入 OwinContext。如果你真的需要它,注入一个工厂类。
标签: c# asp.net-mvc dependency-injection owin simple-injector