Dependency injection 解析.net核心控制台应用程序中引用程序集中的依赖项

Dependency injection 解析.net核心控制台应用程序中引用程序集中的依赖项,dependency-injection,.net-core,Dependency Injection,.net Core,我正在测试一个小型控制台应用程序,该应用程序将用于显示基于Quartz队列的信息,我正在努力在引用程序集中解决依赖关系 我的控制台应用程序在一个名为App.Monitor的程序集中引用了一个EventData类,该类依赖于IUtilities,它是局部的,因为基本代码是生成的,出于特定原因,我们将这些属性/方法添加到该类中 public partial class EventData { private readonly IUtilities _utilities; [Json

我正在测试一个小型控制台应用程序,该应用程序将用于显示基于Quartz队列的信息,我正在努力在引用程序集中解决依赖关系

我的控制台应用程序在一个名为App.Monitor的程序集中引用了一个EventData类,该类依赖于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();
}
EventData(生成的代码)

EventData(部分使用自定义逻辑)


在控制台中,您需要接管框架的角色,获取依赖项并调用所需的成员

var utility = provider.GetRequiredService<IUtilities>();

var list = JsonConvert.DeserializeObject<List<QuartzJobs>>(json);    

var stamp = utility?.Epoch(list[0].EventData.Timestamp);
var utility=provider.GetRequiredService();
var list=JsonConvert.DeserializeObject(json);
var stamp=utility?.Epoch(列表[0].EventData.Timestamp);

这是因为容器/提供程序不是解析
EventData
的容器/提供程序,因此没有注入任何内容。

如何初始化
EventData
?在哪里调用获取依赖项的构造函数?@Nkosi EventData是QuartzJobs(一个类)上的一个属性,该属性在用户请求日期戳时(根据我的最后一段代码)从EventData类返回值。这在我通过ASP.Net核心控制器时起作用,如果控制台应用程序为not,则表示正在调用默认构造函数,而不是您在partial中定义的构造函数。这也是我所经历的,但是,当我执行列表[0]时,成功调用了partial类构造函数。EventData.DateStamp;这就是我在此期间所做的,是的。如果你愿意的话,这会打破这种模式:(
public class QuartzJobs 
{
    [JsonProperty("event-data")]
    public EventData EventData { get; set; }
}
public partial class EventData
{
    [JsonProperty("timestamp")]
    public double Timestamp { get; set; }
}
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;
    }
}
var utility = provider.GetRequiredService<IUtilities>();

var list = JsonConvert.DeserializeObject<List<QuartzJobs>>(json);    

var stamp = utility?.Epoch(list[0].EventData.Timestamp);