asp.net – 在新线程中使用Ninject
发布时间:2020-12-16 09:47:32 所属栏目:asp.Net 来源:网络整理
导读:我需要为长时间运行的任务启动一个新线程(写入文档存储,触发重新索引等). 我在ASP.Net MVC网站上使用Ninject.本质上,我想从我的Http请求中生成一个新线程,该线程实例化它自己的对象,确保在新线程中没有使用Http Request中的数据库连接等.我不确定要使用什么
我需要为长时间运行的任务启动一个新线程(写入文档存储,触发重新索引等).
我在ASP.Net MVC网站上使用Ninject.本质上,我想从我的Http请求中生成一个新线程,该线程实例化它自己的对象,确保在新线程中没有使用Http Request中的数据库连接等.我不确定要使用什么来生成线程,或者如何配置Ninject以不从Web请求上下文重用我的数据库会话. 下面是该问题的基本序列图 我在Ninject中读过一些关于命名范围的内容,但我不确定它是否与之相关. 我将生成新线程的CommandProcessor的代码是: public class CommandProcessor { private IKernel _serviceLocator; public CommandProc(IKernel serviceLocator) { _serviceLocator = serviceLocator; } public void Process<TCommand>(TCommand command) where T : ICommand { var commandHandlers = _serviceLocator.Get<ICommandHandler<TCommand>>(); foreach (var commandHandler in commandHandlers) { // I want this call to be asynchronous commandHandler.Handle(command); } } } 提前致谢, 哈米什. 解决方法
当您生成新线程时,从Ninject创建一个新的激活上下文以在线程中使用:
Thread thread = new Thread(new ThreadStart(() => { using (IActivationBlock activation = kernel.BeginBlock()) { var commandHandlers = activation.Get<ICommandHandler<TCommand>>(); foreach (var commandHandler in commandHandlers) { commandHandler.Handle(command); } } })); thread.Start(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ActionLink无法在“if”块内渲染
- 五幅图演示ASP.NET编译过程
- ASP.NET MVC:数据注释验证足够了吗?
- asp.net – MiniProfiler.Stop()上的MVC Mini Profiler异常
- asp.net-mvc – 使用ASP.NET MVC进行项目组织的最佳实践
- “XmlDocumentationProvider”不实现接口成员“IDocumentat
- asp.net-core – 为什么默认的mvc6模板针对多个DNX版本?
- asp.net – 经典ASP出站TLS 1.2
- asp.net-mvc – 为什么IIS没有清理池回收导致网站内存异常的
- asp.net – 如何从AJAX调用非静态方法?
推荐文章
站长推荐
- asp.net – ASPXAUTH cookie未保存
- asp.net – 如何将数据保存在MVC控制器的内存中?
- asp.net-mvc – telerik-grid onRowSelect如何获
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的
- asp.net – 在MVC5应用程序中使用OWIN软件包的好
- 经典ASP和UTF-8
- asp.net-mvc – MVC – 它只是一个三层模型吗?
- 当调用ASP.NET System.Web.HttpResponse.End()时
- asp.net-mvc – IIS 7.0不显示自定义错误页面
- asp.net-core-2.0 – 如何从Core 2 RazorPage Vi
热点阅读