解决的参考组件的依赖关系在.NET核心控制台应用程序

问题描述 投票:1回答:1

我测试将用于基于一个石英队列为显示信息的小型控制台应用程序和我挣扎到的依赖于参考组件内解决。

我的控制台应用程序引用的EVENTDATA类,这对IUtilities依赖,被称为App.Monitor组件内,它的partial'ed作为基料,生成的代码,我们正在将这些属性/方法的类具体原因。 ..

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(partial'ed与定制逻辑)

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;
    }
}
dependency-injection .net-core
1个回答
1
投票

在控制台中,您将需要接管框架的作用和取得的依赖性,并调用所需的成员

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

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

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

这是因为容器/供应商是不是一个解决EventData,因此没有被注入。

© www.soinside.com 2019 - 2024. All rights reserved.