Ошибка при создании базы

Класс контроллера:

private readonly ILogger<HomeController> _logger;
        IShopRepository shop;
       
        public HomeController(ILogger<HomeController> logger , IShopRepository shopcont )
        {
           
            this.shop = shopcont;
            
                _logger = logger;
        }

ShopContext:

 public class ShopContext : DbContext
    {

            
        public ShopContext(DbContextOptions<ShopContext> options)
                : base(options)
            {
            Database.EnsureCreated();
            }
        
    }

ShopInject:

 public interface IShopRepository
    {
       ///код
    }

    public class ShopInject :  IShopRepository
    {
        ShopContext shop;
        
        public ShopInject(ShopContext shopcont)
        {
            this.shop = shopcont;
          
        }
      
    }

ConfigureServices:

 public void ConfigureServices(IServiceCollection services)
        {
            
            string connection = Configuration.GetConnectionString("DefaultConnection");
            services.AddDbContext<ShopContext>(options =>
       options.UseSqlServer(connection, builder =>
       {
           builder.EnableRetryOnFailure();
       }));
           
            services.AddSingleton<IShopRepository, ShopInject>();
          
            services.AddMemoryCache();
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddReact();
            services.AddJsEngineSwitcher(options => options.DefaultEngineName = ChakraCoreJsEngine.EngineName).AddChakraCore();
        }

При запуске приложения получаю ошибку:

InvalidOperationException: Cannot consume scoped service 'Shop.Models.ShopContext' from singleton 'Shop.Containers.IShopRepository.

Подскажите, пожалуйста, как исправить?

Спасибо, я заменил


services.AddSingleton<IShopRepository, ShopInject>();

на

services.AddTransient<IShopRepository, ShopInject>();

И ошибка ушла . Но дальше я добавил такие строчки для заполнения базы:



   public ShopInject(ShopContext shopcont)
        {
            this.shop = shopcont;
           
            
            if (!this.shop.Products.Any())
            {



                this.shop.Products.AddRange(
                new Product
                {
                    Count = 20,
                    Name = "Спрайт",
                    Price = 15,
                    Image = "/images/Спрайт.png"
                }
               
               
              
                );

                this.shop.SaveChanges();
            }

        }

И при создании базы добавляемая строка дублируется. Не подскажете с чем это может быть связано?


Ответы (0 шт):