Код: Выделить всё
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddSingleton();
// Ensure cMain is constructed before using it to get the connection string
var serviceProvider = builder.Services.BuildServiceProvider();
var cMainInstance = serviceProvider.GetRequiredService();
var connectionString = cMainInstance.ConnectionString;
// Register the DbContext with the correct connection string
builder.Services.AddDbContext(options => options.UseSqlServer(connectionString));
builder.Services.AddScoped();
builder.Services.AddHostedService();
var host = builder.Build();
host.Run();
Код: Выделить всё
public class UnitOfWork : IUnitOfWork
{
private readonly ApplicationDbContext _db;
public UnitOfWork(ApplicationDbContext db)
{
_db = db;
BreadCrumbs = new BreadCrumbRepository(_db);
}
public IBreadCrumbRepository BreadCrumbs { get; private set; }
public void Save()
{
_db.SaveChanges();
}
}
Код: Выделить всё
public interface IUnitOfWork
{
IBreadCrumbRepository BreadCrumbs { get; }
void Save();
}
Код: Выделить всё
public class Worker : BackgroundService
{
private readonly ILogger _logger;
private readonly cMain _cmain;
private readonly IConfiguration _configuration;
private readonly IUnitOfWork _uow;
public Worker()
{
}
public Worker(ILogger logger, IConfiguration configuration, IUnitOfWork uow)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
_uow = uow ?? throw new ArgumentNullException(nameof(uow));
_cmain = new cMain(_configuration);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var breadCrumb = new BreadCrumb
{
Application = Assembly.GetExecutingAssembly().GetName().Name,
DateTime = DateTime.Now,
Description = "Test",
EnquiryHeader_ID = 1,
EventName = "Test",
ReferenceID = 1,
Result = "Test"
};
//await _uow.BreadCrumbs.AddAsync(breadCrumb);
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}
await Task.Delay(1000, stoppingToken);
}
}
}
Выброшено исключение: «System.AggregateException» в Microsoft.Extensions.DependencyInjection. .dll
Некоторые службы невозможно создать.
Если есть обработчик этого исключения, программу можно безопасно продолжить.
Я был бы очень признателен, если бы я указал, где я ошибся или чего мне не хватает.
Я ожидал, что приложение запустится и будет использовать IUnitOfWork в рабочем процессе сорт. Когда я удаляю DI, он запускается.
Подробнее здесь: https://stackoverflow.com/questions/793 ... er-service
Мобильная версия