c# - .Net Core Worker 中类的依赖注入
问题描述
我正在尝试在 .Net 核心工作者服务的自定义类中使用 Serilog,但遇到了一些奇怪的问题。我的设置如下:
程序.cs:
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
Log.Information("====================================================================");
Log.Information($"Application Starts. Version: {System.Reflection.Assembly.GetEntryAssembly()?.GetName().Version}");
Log.Information($"Application Directory: {AppDomain.CurrentDomain.BaseDirectory}");
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Log.Fatal(e, "Application terminated unexpectedly");
}
finally
{
Log.Information("====================================================================");
Log.CloseAndFlush();
}
和:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
// configure the app here.
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.UseSerilog();
到目前为止,一切都很标准。然后我将依赖项注入到 Worker.cs 中,如下所示:
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
这工作正常 - 我按预期从我在这里所做的调用中获取日志条目。当我创建自定义类的实例时,事情就会失败。因此,在我的 Worker.cs 中,我执行以下操作:
MyCustomProduct cProduct = JsonConvert.DeserializeObject<MyCustomProduct>(response.Content);
因此,我显然采用了 RestSharp 响应并使用 MyCustomProduct 类对其进行反序列化。都好。我以同样的方式将依赖注入到这个类中:
private readonly ILogger<MyCustomProduct> _logger;
public MyCustomProduct(ILogger<MyCustomProduct> logger)
{
_logger = logger;
}
但是,当我尝试从此类中调用 _logger.LogInformation (或任何其他函数)时,它失败了,告诉我对 _logger 的引用为空。
我意识到我在这里做了一些根本上愚蠢的事情,但我看不到它......
解决方案
推荐阅读
- php - 运行测试 Yii2 Codeception 后如何恢复数据库更改
- perl - 根据一行中的条件从多个文件中提取行
- java - 如何在一个应用程序中处理基于表单的身份验证和基于 (jwt) 令牌的身份验证
- javascript - Codepen 中的 SemanticUI 示例不起作用
- mysql - 在内部联接上访问左联接
- c# - C# 组合框选定项更改(从单击选项到底部选项)
- ios - iOS 自定义初始化问题,如何设置默认初始化方法?
- java - LocalDate 返回随机日期
- java - Spring Rest Template Http 客户端错误异常
- mysql - 如何传递逗号分隔的输入参数以从另一个存储过程调用存储过程