因此,在开发电子商务应用程序时,我创建了存储库接口、类和模型。
然后,当我添加迁移时,我将存储库注册为服务,但出现此错误:
访问 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 新手,因此非常感谢您的耐心和帮助
您正在注册一个接口,但您的设计者想要具体的实现。
更改您的演员:
public OrderRepository(CoffeeShopDBContext dBContext, ShoppingCartRepository shoppingCartRepository)
致:
public OrderRepository(CoffeeShopDBContext dBContext, IShoppingCartRepository shoppingCartRepository)