Подходящий конструктор для типа не найден (Просмотреть компонент)
Просмотреть компонент:
public class WidgetViewComponent : ViewComponent
{
private readonly IWidgetService _WidgetService;
private WidgetViewComponent(IWidgetService widgetService)
{
_WidgetService = widgetService;
}
public async Task<IViewComponentResult> InvokeAsync(int widgetId)
{
var widget = await _WidgetService.GetWidgetById(widgetId);
return View(widget);
}
}
В представлении ~/Views/Employees/Details.cshtml
@await Component.InvokeAsync("Widget", new { WidgetId = Model.WidgetId } )
Компонент представления находится в ~ Views/Shared/Components/Widget/Default.cshtml
Ошибка, которую я получаю, ниже:
InvalidOperationException: подходящего конструктора для типа "MyApp.ViewComponents.WidgetViewComponent" не удалось найти. Убедитесь, что тип является конкретным, а службы зарегистрированы для всех параметров публичного конструктора.
Ответы
Ответ 1
Проблема в том, что ваш конструктор является приватным:
private WidgetViewComponent(IWidgetService widgetService)
{
_WidgetService = widgetService;
}
Он должен быть открытым, иначе DI не сможет получить к нему доступ:
public WidgetViewComponent(IWidgetService widgetService)
{
_WidgetService = widgetService;
}