Dependency injection 解析.net核心控制台应用程序中引用程序集中的依赖项
我正在测试一个小型控制台应用程序,该应用程序将用于显示基于Quartz队列的信息,我正在努力在引用程序集中解决依赖关系 我的控制台应用程序在一个名为App.Monitor的程序集中引用了一个EventData类,该类依赖于IUtilities,它是局部的,因为基本代码是生成的,出于特定原因,我们将这些属性/方法添加到该类中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
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);