سلام یک سرویس نوشتم و در startup صدا زدم داخل سرویس از Repository استفاده کردم اما هنگام اجرای پروژه به application dbcontext داخل repository ها خطا میده ؟ علتش چیه ؟
service
public class TimedHostedService : IHostedService, IDisposable { private readonly ILogger _logger; private Timer _timer; private readonly IEmailSender _emailSender; private readonly ITicketMasterRepository _ticketMaster_Repository; public TimedHostedService(ILogger<TimedHostedService> logger, IEmailSender emailSender, ITicketMasterRepository ticketMaster_Repository ) { _logger = logger; _emailSender = emailSender; _ticketMaster_Repository = ticketMaster_Repository; } public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer(DoWork, null, TimeSpan.Zero,TimeSpan.FromDays(1)); return Task.CompletedTask; } private void DoWork(object state) { _emailSender.SendEmailAsync("elahi1mahdi@yahoo.com","5 Second","5 ثانیه "); } public Task StopAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is stopping."); _timer?.Change(Timeout.Infinite, 0); return Task.CompletedTask; } public void Dispose() { _timer?.Dispose(); } }
services.AddSingleton<IHostedService, TimedHostedService>(); services.AddSingleton<ITicketMasterRepository, TicketMasterRepository > ();
Error
Cannot consume scoped service 'DataLayer.ApplicationDbContext' from singleton 'Services.Repositories.ITicketMasterRepository
به scope تغییر دادم این خطا رو نمایش میده
Cannot consume scoped service 'Microsoft.Extensions.Hosting.IHostedService' from singleton 'Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor
باز هم دارید همان کار قبلی رو می کنید در اینجا TimedHostedService به صورت Singleton می باشد.
نه تغییر دادم که این ارور رو نشون میده
services.AddTransient<IHostedService, TimedHostedService>(); services.AddTransient<ITicketMasterRepository, TicketMasterRepository > ();
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)