当我在 Program.cs 中将存储库注册为服务时,Net 迁移不起作用

问题描述 投票:0回答:1

因此,在开发电子商务应用程序时,我创建了存储库接口、类和模型。

然后,当我添加迁移时,我将存储库注册为服务,但出现此错误:

访问 Microsoft.Extensions.Hosting 服务时发生错误。在没有应用程序服务提供商的情况下继续。

错误:无法构造某些服务(验证服务描述符“ServiceType:CoffeeShop.Models.Interfaces.IOrderRepository Lifetime:作用域实现类型:CoffeeShop.Models.Services.OrderRepository”时出错:无法解析类型“CoffeeShop”的服务尝试激活“CoffeeShop.Models.Services.OrderRepository”时出现“.Models.Services.ShoppingCartRepository”。)

无法创建类型为“”的“DbContext”。尝试激活“CoffeeShop.Data.CoffeeShopDBContext”时出现异常“无法解析类型“Microsoft.EntityFrameworkCore.DbContextOptions`1[CoffeeShop.Data.CoffeeShopDBContext]”的服务。尝试创建实例时抛出。有关设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728

我的其他存储库(例如购物车)一直运行良好。但是当我删除

Program.cs
中的注册时,我没有收到任何错误:

builder.Services.AddControllersWithViews();

builder.Services.AddScoped<IProductRepository, ProductRepository>();

//  This line of code below is causing the issue 
builder.Services.AddScoped<IOrderRepository, OrderRepository>();

builder.Services.AddDbContext<CoffeeShopDBContext>(option => option.UseSqlServer(builder.Configuration.GetConnectionString("CoffeeShopDbConnection")));
builder.Services.AddScoped<IShoppingCartRepository, ShoppingCartRepository>(s => ShoppingCartRepository.GetCart(s));

我已经仔细检查了所有必需的服务是否已注册,并且存储库和模型是否已正确配置。

这是我的存储库类:

using CoffeeShop.Data;
using CoffeeShop.Models.Interfaces;

namespace CoffeeShop.Models.Services
{
    public class OrderRepository : IOrderRepository
    {
        private CoffeeShopDBContext dBContext;
        private IShoppingCartRepository shopCartRepository;

        public OrderRepository(CoffeeShopDBContext dBContext, ShoppingCartRepository shoppingCartRepository)
        {
            this.dBContext = dBContext; 
            this.shopCartRepository = shoppingCartRepository;   
        }

        public void PlaceOrder(Order order)
        {
           var shoppingCartItems = shopCartRepository.GetShoppingCartItems();
            order.OrderDetails = new List<OrderDetail>(); 

            foreach(var item in shoppingCartItems) 
            {
                var orderDetail = new OrderDetail()
                {
                    Quantity = item.Qty,
                    ProductId = (int)item.Product.Id, 
                    Price = (decimal)item.Product.Price, 
                };

                order.OrderDetails.Add(orderDetail);
            }

            order.OrderPlaced = DateTime.Now;
            order.OrderTotal = shopCartRepository.GetShoppingCartTotal();   

            dBContext.Orders.Add(order);
            dBContext.SaveChanges();    
        }
    }
}

我是 .NET 新手,因此非常感谢您的耐心和帮助

c# .net database-migration
1个回答
0
投票

您正在注册一个接口,但您的设计者想要具体的实现。

更改您的演员:

public OrderRepository(CoffeeShopDBContext dBContext, ShoppingCartRepository shoppingCartRepository)

致:

public OrderRepository(CoffeeShopDBContext dBContext, IShoppingCartRepository shoppingCartRepository)
© www.soinside.com 2019 - 2024. All rights reserved.