web-dev-qa-db-fra.com

Constructeur approprié pour le type introuvable (Afficher le composant)

Composant de vue:

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

Dans la vue ~/Vues/Employés/Détails.cshtml

@await Component.InvokeAsync("Widget", new { WidgetId = Model.WidgetId } )

Le composant de vue est situé dans ~ Vues/Partagé/Composants/Widget/Default.cshtml

L'erreur que je reçois est ci-dessous:

InvalidOperationException: un constructeur approprié pour le type "MyApp.ViewComponents.WidgetViewComponent" n'a pas pu être localisé. Assurez-vous que le type est concret et que les services sont enregistrés pour tous les paramètres d'un constructeur public.

31
MrKobayashi

Le problème est que votre constructeur est privé:

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

Il doit être public sinon la DI ne peut pas y accéder:

public WidgetViewComponent(IWidgetService widgetService)
{
    _WidgetService = widgetService;
}
85
Joe Audette