Ошибка внедрения зависимостей ASP.NET Core: невозможно разрешить службу для типа при попытке активации - ошибка возникает при вызове viewcomponent
Я создаю компоненты представления, а ниже - весь мой код... но когда я вызываю этот компонент представления, я получаю ошибку, как показано ниже... поэтому любой может помочь мне решить эту проблему, а также объяснить, в чем именно заключается проблема.
Ошибка:
InvalidOperationException: невозможно разрешить службу для типа PerfumeStore.Data.Models.ShoppingCart при попытке активировать PerfumeStore.ViewComponents.ShoppingCartSummaryViewComponent.
Прежде всего, я создал одну папку с именем ViewComponents, в которой я создал новый класс с именем ShoppingCartSummaryViewComponent.cs, и ниже приведен его код.
using Microsoft.AspNetCore.Mvc;
using PerfumeStore.Data.Models;
using PerfumeStore.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace PerfumeStore.ViewComponents
{
public class ShoppingCartSummaryViewComponent : ViewComponent
{
private readonly ShoppingCart _shoppingCart;
public ShoppingCartSummaryViewComponent(ShoppingCart shoppingCart)
{
_shoppingCart = shoppingCart;
}
public IViewComponentResult Invoke()
{
var items = _shoppingCart.GetShoppingCartItems();
_shoppingCart.ShoppingCartItems = items;
var shoppingCartViewModel = new ShoppingCartViewModel
{
ShoppingCart = _shoppingCart,
ShoppingCartTotal = _shoppingCart.GetShoppingCartTotal()
};
return View(shoppingCartViewModel);
}
}
}
Теперь файл cshtml находится ниже по этому пути: в Views / Shared / Components / ShoppingCartSummary /Default.cshtml
@model ShoppingCartViewModel
@if (Model.ShoppingCart.ShoppingCartItems.Count > 0)
{
<li>
<a asp-controller="ShoppingCart">
<span class="glphyicon glphyicon-shopping-cart"></span>
<span id="cart-status">
@Model.ShoppingCart.ShoppingCartItems.Count
</span>
</a>
</li>
}
Теперь в моем файле _Layout.cshtml я вызываю этот компонент представления таким образом.
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
@await Component.InvokeAsync("ShoppingCartSummary")
</ul>
</div>
Но я получаю эту ошибку:
InvalidOperationException: невозможно разрешить службу для типа PerfumeStore.Data.Models.ShoppingCart при попытке активировать PerfumeStore.ViewComponents.ShoppingCartSummaryViewComponent.
благодаря
2 ответа
Зарегистрируйтесь в классе
ConfigureService
метод в
Startup.cs
файл
services.AddScoped<ShoppingCart>();
В зависимости от жизненного цикла зависимости (временный, ограниченный, одноэлементный) вы можете зарегистрировать его в своем
Startup.cs
в виде:
Переходный:
services.AddTransient<IMyDependency, MyDependency>();
Объем:
services.AddScoped<IMyDependency, MyDependency>();
Синглтон:
services.AddSingleton<IMyDependency, MyDependency>();
Вы можете прочитать больше в официальных документах
Примечание. Если ваш
ShoppingCart
класс не имеет интерфейса, вы можете опустить базовый тип при регистрации -
services.AddTransient<MyDependency>();