Не удалось разрешить службу для типа "fruittyPie.Models.ShoppingCartItem" при попытке активировать "fruittyPie.Controllers.CartController" - PullRequest
0 голосов
/ 05 сентября 2018

Я создаю контроллер корзины покупок в первый раз, я застрял в этом исключении Я знаю, что есть необходимость добавить сервис с определенными областями в классе запуска, но не знаю, как это сделать в моем случае

InvalidOperationException: невозможно разрешить службу для типа 'fruittyPie.Models.ShoppingCartItem' при попытке активации 'FruittyPie.Controllers.CartController'.

мой стартап:

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

}

1 Ответ

0 голосов
/ 05 сентября 2018

ShoppingCartItem и ShoppingCart не зарегистрированы как сервисы, но вы добавили их в свой конструктор. Теперь ASP.NET попытается разрешить эти параметры из контейнера внедрения зависимостей, который, очевидно, завершается ошибкой.

Эти параметры не принадлежат конструктору. Вы можете удалить их и запросить нужные ShoppingCartItem и / или ShoppinCart объекты из AppDbContext.

...