Je voudrais rechercher dans une liste de tous les ViewComponents disponibles dans un projet asp.net core MVC (mvc6 ?), quelque chose comme ceci.
Default.cshtml pour ViewComponent
foreach (var section in Model.sections)
{
var sectionId = section.Id;
if (_siteSettings.AvailableComponents.Any(c => c == sectionId))
{
@await Component.InvokeAsync(sectionId);
}
else
{
<p>Could not find component: @sectionId </p>
}
}
J'ai réussi à le faire en enregistrant manuellement chaque composant dans une liste disponible au moment de l'exécution. Mais ce que j'aimerais accomplir est d'enregistrer chaque composant de vue simplement dans chaque fichier de classe de composant, comme ceci :
public class NewsList : ViewComponent
{
private ISiteSettings _siteSettings;
private string ComponentName = "NewsList";
public NewsList(ISiteSettings siteSettings)
{
_siteSettings = siteSettings;
_siteSettings.AvailableComponents.Add(ComponentName);
}
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
Le problème est que le constructeur de chaque composant de vue ne sera pas exécuté jusqu'à ce que le composant de vue soit rendu, j'ai besoin que tous les composants soient enregistrés "automatiquement" en quelque sorte. Cela est-il possible ?