未找到类型的合适构造函数(视图组件)

本文关键字:构造函数 视图 组件 类型 | 更新日期: 2023-09-27 18:03:33

视图组件:

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

view组件位于~Views/Shared/Components/Widget/Default.cshtml

我收到的错误如下:

InvalidOperationException:一个适合MyApp.ViewComponents类型的构造函数。无法找到WidgetViewComponent。确保类型是具体的,并且为公共构造函数的所有参数都注册了服务。

未找到类型的合适构造函数(视图组件)

问题是你的构造函数是私有的:

private WidgetViewComponent(IWidgetService widgetService)
{
    _WidgetService = widgetService;
}

它应该是公共的,否则DI不能访问它:

public WidgetViewComponent(IWidgetService widgetService)
{
    _WidgetService = widgetService;
}