Я выполняю Windows службу, в которой я использую Serilog
, это нормально на рабочем месте:
public class Worker: BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IConfiguration _configuration;
private readonly string _connectionString;
private bool _serviceIsStarting = true;
public Worker(ILogger<Worker> logger, IConfiguration iConfig)
{
_logger = logger;
_configuration = iConfig;
_connectionString = _configuration.GetConnectionString("DestinationDatabase");
}
//....
}
Мой Program.cs содержит это:
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.UseWindowsService()
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration))
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
Все хорошо, но затем я хочу добавить регистратор в мой пользовательский класс, который использует экземпляр Worker:
public class DataAccess
{
private readonly string _connectionString;
private readonly ILogger<DataAccess> _logger;
public DataAccess(ILogger<DataAccess> logger, string connectionString)
{
_connectionString = connectionString;
_logger = logger;
}
//.....
}
Моя проблема в том, что я не знаю, как создать экземпляр класса DataAccess на рабочем месте. или к внедрению зависимости здесь.
Вот [упрощенная] версия моего класса:
using Microsoft.Extensions.Logging;
using Dapper;
public class DataAccess
{
private readonly string _connectionString;
private readonly ILogger<DataAccess> _logger;
public DataAccess(ILogger<DataAccess> logger, string connectionString)
{
_logger = logger;
_connectionString = connectionString;
}
public void SaveInspection(InspectionElm inspection)
{
using IDbConnection connection = new System.Data.SqlClient.SqlConnection(_connectionString);
connection.Open();
var p = new DynamicParameters();
p.Add("@RodNumber", inspection.RodNumber);
p.Add("@InspectionDate", Convert.ToDateTime(inspection.InspectionDate));
p.Add("@MeasurementEnd", Convert.ToDateTime(inspection.MeasurementEnd));
p.Add("@InspectionResultPass", Convert.ToBoolean(inspection.InspectionResultPass));;
connection.Execute("InsertTindasjaMasterRecord", p, commandType: CommandType.StoredProcedure);
_logger.LogInformation("Log something...");
}
public void InitMesureResultTypes()
{
using IDbConnection connection = new System.Data.SqlClient.SqlConnection(_connectionString);
connection.Open();
connection.Execute("InitMeasureResultType", null, commandType: CommandType.StoredProcedure);
_logger.LogInformation("Log something...");
}
}