我是第一次创建购物车控制器,我遇到了这个例外我知道有必要在启动类中添加作用域服务,但不知道在我的情况下怎么做
InvalidOperationException:尝试激活'fruittyPie.Controllers.CartController'时无法解析类型'fruittyPie.Models.ShoppingCartItem'的服务。
我的创业:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddTransient<IPieRepository, PieRepository>();
services.AddTransient<ICatagoryRepository, CatagoryRepository>();
services.AddTransient<IFeedBackRepository, FeedbackRepository>();
services.AddSingleton<IFileProvider>(
new PhysicalFileProvider(
Path.Combine(
Directory.GetCurrentDirectory(), "wwwroot")
));
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvc();
services.AddMemoryCache();
services.AddSession();
}
CartController
public class CartController : Controller
{
//[Route("cart")]
private readonly AppDbContext _appDbContext;
private readonly ShoppingCartItem _shoppingCartItems;
private readonly ShoppingCart _shoppingCart;
public CartController(AppDbContext appDbContext,ShoppingCartItem shoppingCartItem, ShoppingCart shoppingCart)
{
_appDbContext = appDbContext;
_shoppingCartItems = shoppingCartItem;
_shoppingCart = shoppingCart;
}
public string ShoppingCartId { get; set; }
public IActionResult Index()
{
// List<ShoppingCartItem> shoppingCartItems = new List<ShoppingCartItem>();
ViewBag.cart =
_appDbContext.ShoppingCartItemx.Where
(c => c.CartId == ShoppingCartId)
.Include(s => s.productx)
.ToListAsync();
ViewBag.total = _appDbContext.ShoppingCartItemx.Where(d => d.CartId == ShoppingCartId)
.Select(f => f.productx.Price * f.Amount).Sum();
return View();
}
public void AddToCart(Product productz, int amount)
{
var shoppingCartItemz = _appDbContext.ShoppingCartItemx.SingleOrDefault(
s => s.productx.Id == productz.Id && s.CartId == ShoppingCartId);
if (shoppingCartItemz == null)
{
shoppingCartItemz = new ShoppingCartItem
{
CartId = ShoppingCartId,
productx = productz,
Amount = 1
};
_appDbContext.ShoppingCartItemx.Add(shoppingCartItemz);
}
else
{
shoppingCartItemz.Amount++;
}
_appDbContext.SaveChanges();
}
public int RemoveFromCart(Product productz)
{
var shoppingCartItemz = _appDbContext.ShoppingCartItemx.SingleOrDefault(
s => s.productx.Id == productz.Id && s.CartId == ShoppingCartId);
var localAmount = 0;
if (shoppingCartItemz != null)
{
if (shoppingCartItemz.Amount > 1)
{
shoppingCartItemz.Amount--;
localAmount = shoppingCartItemz.Amount;
}
else
{
_appDbContext.ShoppingCartItemx.Remove(shoppingCartItemz);
}
}
_appDbContext.SaveChanges();
return localAmount;
}
}
}
ShoppingCartItem
和ShoppingCart
未注册为服务,但您已将其添加到构造函数中。 ASP.NET现在将尝试从依赖注入容器中解析这些参数,这显然会失败。
这些参数不属于构造函数。您可以删除它们并从ShoppingCartItem
查询所需的ShoppinCart
和/或AppDbContext
实体。