Подходящий конструктор для типа не найден (Просмотреть компонент)

Просмотреть компонент:

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