问题标签 [ihostedservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 注入 dbContext 时返回“找不到与给定参数匹配的构造函数”
语境
.NET 5 控制台应用程序使用 IHostedService 模式和 EntityFramework Core 5。
问题
dbContext 如下所示:
主机构建器是这样配置的:
...并且主机服务是这样构造的:
然后我有一个这样的 XUnit 测试:
测试抛出异常
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException:无法实例化类的代理:WeatherManagerDataDownloader.WeatherDbContext。找不到与给定参数匹配的构造函数:
请注意,为了清楚起见,我已经简化了代码。我在模拟其他注入 DataDownloader 的服务,但我不是在模拟 dBContext。编辑:我现在已经添加了完整的代码,因为有人指出,即使我的简化代码没有暗示,模拟似乎正在发生。
问题
为什么会发生此测试异常?正如我所看到的,模拟应该与传入的 dBContext 无关。
.net-core - .net core 3.1 HostBuilder 没有 RunAsServiceAsync 方法(IHostBuilder 不包含 RunAsServiceAsync 的定义)
我有 .net core 3.1 控制台应用程序,我想将它作为 Windows 服务运行,我的 program.cs 看起来像
.csproj 是
但是对于 RunAsServiceAsync() 错误就像“IHostBuilder 不包含 RunAsServiceAsync 的定义”一样
谁能指出我在哪里/我错过了什么?
c# - 在 IHostedService 中启动和停止任务
我创建了一个 ASP.NET 核心 API,但我不知道如何正确实现 IHostedService。我有几个“工人”类需要作为后台进程运行,所以我使用 IHostedService 来异步启动所有任务。
启动.cs:
背景服务.cs:
工人.cs
工人类似乎工作(基于日志),但 cancelationToken 没有,所以清理代码永远不会执行(似乎)。如何正确取消所有正在运行的任务并在 StopAsync 方法中等待它们完成?
(上面的所有代码都被简化了,它实际上包含 di 和错误处理,但这不相关)
c# - IhostedService 异常
实施 IHostedServices 后,我一直收到此异常。我不知道是什么原因造成的。有人可以帮忙吗?
{"ClassName":"System.Threading.Tasks.TaskCanceledException","Message":"任务被取消。","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":"在 Core_API.Services.HourlyService.ExecuteAsync(CancellationToken cancelToken)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2146233029,"Source":"System.Private.CoreLib" "WatsonBuckets":null}
c# - 在应用程序启动期间运行 IHostedService 函数,但只运行一次
run a function
我只需要在once
每次应用程序启动时(该函数检查Mongo collection
我的数据库中的特定内容并插入我自己预定义的文档)。
IHostedService/BackgroundService
似乎能够胜任这项工作。我只需要将服务注入到我的 Startup.cs 文件中。
但是,我想知道是否无论如何我可以优雅地完成这项任务,因为IHostedService
它确实是为了实现更多的cron job
(需要在一段时间间隔内运行的任务,比如每 30 分钟一次)。
谢谢你。
dependency-injection - 如何使用 Simple Injector 在 HostedService 计时器中注入取消令牌
我正在尝试创建一个控制台应用程序,该应用程序使用 Simple Injector 运行托管服务,我查看了generichostintegration中的示例。
现在我想更改IProcessor.DoSomeWork
为一个async
以取消令牌作为参数的函数,以便DoSomeWork
可以取消:
我如何从HostedService
并以正确的方式配置容器
我对此有点意见。也许我想错了?
*** 更新 ***
这就是我最后所做的。我尽量保持简单。
托管服务
“伪”调度程序
c# - 在 C# 中,如何动态地将 T 传递给 services.AddHostedService()?
我有一个包含多个托管服务的网络服务。
我希望能够通过“appSettings.json”打开和关闭它们。
在“StartUp.cs”中,我填充了一个实例
StateOfUse
这个枚举是:
每个属性对应一个托管服务。
回到StartUp
课堂上,我添加了以下方法:
这会失败,因为MethodInfo methodInfo
解析为 null,因此将在下一行引发异常。该方法IServiceCollection.AddHostedService<THostedService>()
是一个静态方法,包含Microsoft.Extensions.DependencyInjection
在public static class ServiceCollectionHostedServiceExtensions
. (我不在nameof
代码中使用,因为扩展方法不支持。:-()
是否可以通过泛型访问此方法?如果是这样,怎么做?
c# - ASP.NET Core 应用程序中的 IHostedService 错误 - 为什么对象已被释放?
我在我的服务器解决方案中创建了后台服务
并将其添加到 Startup.cs
我的目标是拥有一个后台服务,每 10 秒检查一次是否有超过允许的通知并删除它们。
但是当我运行应用程序时发生错误
“System.ObjectDisposedException:“无法访问已处置的对象。”
我怎样才能正确地实现这一点?
asp.net-core - asp.net core - 轮询其他有界上下文事件发件箱的长时间运行进程
我正在构建一个遵循 DDD 模式的应用程序,每个 AR 都将其事件发件箱保存到永久商店。该商店被对事件感兴趣的其他部分轮询。
整个应用程序是面向用户的,所以基本的基础设施是 asp.net web api。
现在,我想避免让我的域工件分布在不同的流程/基础设施选项中。例如,监听事件存储并在收到事件时执行逻辑的 Azure 函数。
将 Web api 和事件消费者放在同一个容器中似乎很方便。原因是域工件与 api 和事件消费者基础设施一起部署。
我读到这IHostedService
可能是它的一种选择,因为它可以运行长时间运行的后台进程。
问题是,是否IHostedService
适用于对事件发件箱做出反应的这种特定场景?还是我缺少一些重要的缺点和更好的基础设施选择?
c# - System.AggregateException 与 MessageHandler 和 IParser
我正在用 N 层架构编写我的 Telegram Bot。我问了关于访问处置上下文的问题并在这里得到了答案。我编写了 HostedService 类和 MessageHandler,但出现了一个新错误,无法解决。
托管服务类:
消息处理程序类:
启动配置方法:
您可以在我之前的问题中看到 BLL 和 DAL 注入。
当我从 Telegram 发送请求时,我收到以下错误:
System.AggregateException:“无法构造某些服务(验证服务描述符时出错“ServiceType:TelegramBot.WebApi.Handlers.MessageHandler Lifetime:Scoped ImplementationType:TelegramBot.WebApi.Handlers.MessageHandler”:无法解析服务类型'TelegramBot.BLL.Services.ParserService' 尝试激活'TelegramBot.WebApi.Handlers.MessageHandler'。)'
InvalidOperationException:尝试激活“TelegramBot.WebApi.Handlers.MessageHandler”时无法解析“TelegramBot.BLL.Services.ParserService”类型的服务。