我正在测试一个小控制台应用程序,它将用于显示基于Quartz队列的信息,我正在努力解决在引用程序集中的依赖关系。
我的控制台应用程序引用了一个EventData类,它依赖于一个名为app.monitor的程序集中的iutilities,它是部分的,因为基础是代码生成的,我们出于特定的原因将这些属性/方法添加到类中…
public partial class EventData
{
private readonly IUtilities _utilities;
[JsonIgnore]
public DateTime? DateStamp => _utilities?.Epoch(Timestamp);
[JsonIgnore]
public EventType EventType =>
(EventType)EventType.Parse(typeof(EventType), (CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Event)));
public EventData(IUtilities utitlies)
{
_utilities = utitlies;
}
}
在控制台应用程序中,我根据网络上的各种示例设置了.NET核心依赖项注入,代码供参考:
public IServiceProvider BuildDependencies()
{
services.AddTransient<IHttpContextAccessor, HttpContextAccessor>();
services.AddTransient<IUtilities, Utilities>();
return services.BuildServiceProvider();
}
然后,在控制台应用程序中的某个地方,我正在执行一个调用,该调用应该在实用程序中启动这种依赖关系,但它不这样做,i utilities始终为空:
provider.GetRequiredService<IUtilities>(); // thought this would fix it...
var list = JsonConvert.DeserializeObject<List<QuartzJobs>>(json);
var stamp = list[0].EventData.DateStamp;
更新
QuartzJobs(代码生成)
public class QuartzJobs
{
[JsonProperty("event-data")]
public EventData EventData { get; set; }
}
事件数据(代码生成)
public partial class EventData
{
[JsonProperty("timestamp")]
public double Timestamp { get; set; }
}
事件数据(部分使用自定义逻辑)
公共分部类事件数据
{
专用只读实用程序;
[ JSONNECT ]
公共日期时间?日期戳=>\u实用程序?.epoch(时间戳);
[ JSONNECT ]
公共事件类型EventType=>
(eventtype)eventtype.parse(typeof(eventtype),(cultureinfo.currentulture.textinfo.toitlecase(event));
公共事件数据(实用程序)
{
_公用设施=Utitlies;
}
}