I am doing a Windows Service where I use Serilog
this is fine in the worker:
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");
}
//....
}
My Program.cs contains this:
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>();
});
}
Everything is fine but then I want to inject a logger to my custom class that the Worker instance uses:
public class DataAccess
{
private readonly string _connectionString;
private readonly ILogger<DataAccess> _logger;
public DataAccess(ILogger<DataAccess> logger, string connectionString)
{
_connectionString = connectionString;
_logger = logger;
}
//.....
}
My problem is that I do not know how to instantiate my class DataAccess in the worker or to the dependency injection here.
Here is a [simplified] verison of my class:
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...");
}
}