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

51

视图组件:

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个回答

164

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

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

否则依赖注入(DI)无法访问它,因此它应该是公开的:

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

谢谢 :-D 如果你来自默认公共语言的语言,这是一个真正的陷阱。 - Markus Ende
5
需要真正设置为public。将其设置为internalprotected会导致相同的错误。 - LCIII
哦,我的天啊。我的问题是我没有指定它是公共的。#困难重重 - Travis Peterson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接