ILifetimeScope的autofac DependencyResolutionException用于asp
什么应该是
Asp.net Mvc 5.2,SignalR 2.1,MS Owin(Katana)3.0的Autofac 3.5配置?注册Autofac解析器的方法是否不那么复杂(现在有两个)?或者为什么ILifetimeScope对我的集线器不可见?
例外:
在我的OwinStartup中(见autofac + mvc owin和autofac + signalr in owin): public void Configuration(IAppBuilder app) { var builder = new ContainerBuilder(); // ... registration. There is .InstancePerRequest() and .SingleInstance() Autofac.Integration.Mvc.RegistrationExtensions.RegisterControllers(builder,typeof(MvcApplication).Assembly); Autofac.Integration.SignalR.RegistrationExtensions.RegisterHubs(builder,Assembly.GetExecutingAssembly()); var container = builder.Build(); // 1st resolver DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); app.UseAutofacMiddleware(container); app.UseAutofacMvc(); // yet the 2nd resolver! app.MapSignalR(new HubConfiguration { Resolver = new Autofac.Integration.SignalR.AutofacDependencyResolver(container) }); } 枢纽: public class OperatorHub : Hub { public OperatorHub(ILifetimeScope hubLifetimeScope) { hubLifetimeScope.BeginLifetimeScope(); // ... // HERE IT FALLS. The IMyService relates to MyDbContext (see below) var myservice = hubLifetimeScope.Resolve<IMyService>(); } } UPDATE 破坏组件注册(EF上下文: builder.RegisterType<MyDbContext>().AsSelf().As<DbContext>().InstancePerRequest("OwinLifetimeScope"); 简而言之,错误是MyDbContext不在’root’生命周期范围内,该范围被传递给OperatorHub构造函数. 更新2 在@TravisIllig的帮助下,解决方案是使用.InstancePerLifetimeScope()注册MyDbContext服务,并在集线器中创建一个.将在asp mvc中为http请求创建另一个生命周期范围.在Sharing Dependencies Across Apps Without Requests创建帮助. 集线器也不应该处理给定的作用域,因为它是在第二次运行时导致ObjectDisposedException的根作用域. 解决方法
There is an FAQ on handling this exact exception on the Autofac doc site.问题源于您将InstancePerRequest与SignalR结合使用的事实,其中,also per the documentation:
您似乎已经查看了the Autofac SignalR docs,因为我看到您注入了一个生命周期范围来帮助您管理实例生命周期,但这并没有为您提供每个请求的生命周期范围,它只是为您提供了一个集线器生命周期范围.我可能会建议重新访问该文档以进行复习. The FAQ I mentioned与SignalR集成文档一起,应该为您的应用指出正确的解决方案.许多人只是简单地将他们的注册从InstancePerRequest切换到InstancePerLifetimeScope,但我强烈建议您在跳转到该决定之前阅读常见问题并查看您的选项.它可能是正确的选择,但可能不是 – 这取决于您的应用程序在内部的工作方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC:在回发上更改模型的
- 如何使用asp.net 5项目运行nunit测试,特别是使用
- ASP.NET WebService如何去掉asmx后缀
- 如何强制asp.net GridView控件包装标签中的第一行
- powershell – InvalidOperation:(System.Net.H
- asp.net – 构建动态LINQ查询的最佳方法
- asp.net-core – 无法运行dnx控制台应用程序
- asp.net – 如何使用Web API属性路由传递DateTim
- asp.net-web-api – 没有实体框架的WebAPI ODATA
- ASP.NET Core身份验证