我正在测试一个小型控制台应用程序,该应用程序将用于基于Quartz队列显示信息,而且我正在努力解决要在参考程序集中解析的依赖项。
我的控制台应用程序在一个名为App.Monitor的程序集中引用了一个与IUtilities相关的EventData类,由于生成了代码,所以对它进行了部分修改,并且我们将这些属性/方法添加到此类中具体原因...
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();
}
然后,在控制台应用程序中的某个位置,我正在执行一个调用,该调用应在实用程序中初始化此依赖关系,而不会这样做,IUtilities始终为NULL:
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; }
}
EventData(生成代码)
public partial class EventData
{
[JsonProperty("timestamp")]
public double Timestamp { get; set; }
}
EventData(具有自定义逻辑的部分功能)
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;
}
}
答案 0 :(得分:1)
在控制台中,您需要接管框架的角色并获取依赖关系并调用所需的成员
var utility = provider.GetRequiredService<IUtilities>();
var list = JsonConvert.DeserializeObject<List<QuartzJobs>>(json);
var stamp = utility?.Epoch(list[0].EventData.Timestamp);
那是因为容器/提供者不是解决EventData
的那个,所以没有注入任何东西。