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