مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

استفاده از repository در سرویس ها

  • شنبه 21 مهر 1397
  • 09:10
تشکر میکنم

سلام یک سرویس نوشتم و در 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

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 21 مهر 1397
  • 09:33

شما نمیتوانید داخل یک سرویس Singleton از یک سرویس Scoped استفاده کنید دراین قسمت DbContext شما Scoped می باشد.

تنها راه حلی که وجو داره اینه که شما باید سرویس Singleton خودتون رو به Scoped یا Transient تغییر بدید.

اطلاعات بیشتر ( ^ و ^ )

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • شنبه 21 مهر 1397
  • 09:39

به scope تغییر دادم این خطا رو نمایش میده 
Cannot consume scoped service 'Microsoft.Extensions.Hosting.IHostedService' from singleton 'Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 21 مهر 1397
  • 11:28

باز هم دارید همان کار قبلی رو می کنید در اینجا TimedHostedService به صورت Singleton می باشد.

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • شنبه 21 مهر 1397
  • 13:46

نه تغییر دادم که این  ارور رو نشون میده 

 services.AddTransient<IHostedService, TimedHostedService>();
            services.AddTransient<ITicketMasterRepository, TicketMasterRepository > (); 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)