尝试激活'fruittyPie.Controllers.CartController'时无法解析类型'fruittyPie.Models.ShoppingCartItem'的服务

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

我是第一次创建购物车控制器,我遇到了这个例外我知道有必要在启动类中添加作用域服务,但不知道在我的情况下怎么做

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;
    }
}

}

asp.net-core shopping-cart
1个回答
1
投票

ShoppingCartItemShoppingCart未注册为服务,但您已将其添加到构造函数中。 ASP.NET现在将尝试从依赖注入容器中解析这些参数,这显然会失败。

这些参数不属于构造函数。您可以删除它们并从ShoppingCartItem查询所需的ShoppinCart和/或AppDbContext实体。

© www.soinside.com 2019 - 2024. All rights reserved.