c# - 是否可以将配置发送到 IRecurringJobManager 的 methodCall?
问题描述
我有变量Configuration(IConfiguration接口),我试图将其作为参数发送到 IRecurringJobManager的调用方法中。但是,当我开始项目时出现错误。
Error getting value from 'UsePollingFileWatcher' on 'Microsoft.Extensions.FileProviders.PhysicalFileProvider'. at Newtonsoft.Json.Serialization.ExpressionValueProvider.GetValue(Object target)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Type type, Formatting formatting, JsonSerializerSettings settings)
at Hangfire.Common.SerializationHelper.Serialize(Object value, Type type, SerializationOption option)
at Hangfire.Storage.InvocationData.SerializeArguments(MethodInfo methodInfo, IReadOnlyList`1 arguments)
at Hangfire.Storage.InvocationData.SerializeJob(Job job)
at Hangfire.RecurringJobEntity.GetChangedFields(Nullable`1& nextExecution)
at Hangfire.RecurringJobEntity.IsChanged(IReadOnlyDictionary`2& changedFields, Nullable`1& nextExecution)
at Hangfire.RecurringJobManager.AddOrUpdate(String recurringJobId, Job job, String cronExpression, RecurringJobOptions options)
at Hangfire.RecurringJobManagerExtensions.AddOrUpdate(IRecurringJobManager manager, String recurringJobId, Job job, String cronExpression, TimeZoneInfo timeZone, String queue)
at Hangfire.RecurringJobManagerExtensions.AddOrUpdate(IRecurringJobManager manager, String recurringJobId, Expression`1 methodCall, String cronExpression, TimeZoneInfo timeZone, String queue)
at TaskManager.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager recurringJobManager, IBackgroundJobClient backgroundJobClient) in C:\2021\Sulpak\MAIN\PROJ_ZH\TaskManager\Startup.cs:line 75
下面是 StartUp.cs 中的 Configure 方法。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager recurringJobManager, IBackgroundJobClient backgroundJobClient)
{
...
recurringJobManager.AddOrUpdate("Run every monday", () => Uploader.Execute(Configuration), "20 1 * * MON", TimeZoneInfo.Local);
}
Uploader是一个具有Execute方法的类,我需要在其中使用一些配置变量。
有趣的是,我能够从控制器发送配置而不会出现任何错误。
[HttpGet]
public ActionResult UploadSales()
{
try
{
Uploader.Execute(Configuration);
}
catch (Exception e)
{
Logger.WriteLog(e.Message, "Файлы не выгружены");
throw;
}
return Ok("Файлы выгружены успешно");
}
解决方案
推荐阅读
- c# - 如何计算带有条件的表中的行数?C# 访问
- riot-games-api - 使用 Riot Api 获取实时数据?可能吗?
- angular - 控制台中日期的返回格式与输入中的不同
- c# - 无法访问受密码保护的 Microsoft accdb 数据库 Microsoft.ACE.OLEDB.12.0
- javascript - 带有 JS 的返回顶部按钮
- c# - 基于全屏文本应用程序的 GUI
- c# - Dynamics Crm 创建新帐户 Selenium C#
- javascript - 在 React 的分页上添加活动类的问题
- spring - springboot项目如何在查询中提供参数
- c# - 发送大量邮件时 SmtpClient.SendMailAsync 方法挂起