Blazor-Component hérite de BaseClass
Je suis sur le point de créer une classe de base pour mes composants Razor. Cette classe de base ressemble à:
public abstract class ExampleBase : ComponentBase
{
public virtual void Submit()
{
//DoSomething
}
public virtual void Back()
{
//DoSomething else
}
}
mon Blazor-Component hérite de cette classe
@inherits ExampleBase
<button @onclick="Submit" />
Jusqu'ici tout va bien, mais lorsque je démarre mon application et que cette page est sur le point de se charger, je reçois une exception:
[2020-09-29T12: 09: 03.920Z] Erreur: System.ArgumentException: le type de composant doit implémenter Microsoft.AspNetCore.Components.IComponent. à Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent (séquence Int32, type componentType)
qu'est-ce qui ne va pas en héritant de ComponentBase?
Merci de votre aide
Ajout: j'appelle mon Razor-Component comme ceci et l'exception jette sur le constructeur.OpenComponent
RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}
J'espère que cela t'aides
Réponses
Tout d'abord - Merci à tous pour votre aide que j'apprécie vraiment!
Après quelques heures de pause. J'ai trouvé ma propre erreur ...
Ce que je fais: j'ai créé un service qui charge une liste de types que ce service est injecté dans un composant Razor.
Le code de service:
//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);
Dans mon Razor-Component, j'ai affiché la liste des Razor-Component qui est retournée par le service.
@page "/"
@inject MyService myService
@CurrentFragment
@code{
private RenderFragment CurrentFragment { get; set; }
private List<TypeInfo> listOfRazorComponents;
protected override void OnInitialized
{
listOfRazorComponents = new List<TypeInfo>(myService.GetRazorComponents());
CreateFragment(listOfRazorComponents[0]);
}
RenderFragment CreateFragment(Type typeToDisplay) => builder =>
{
builder.OpenComponent(0, typeToDisplay);
builder.CloseComponent();
};
}
Maintenant, ma stupide erreur ... Après avoir ajouté la @inherits ExampleBase à tous mes composants Razor, les composants n'ont pas été reconstitués par mon "MyService" car j'ai vérifié là-bas pour
x=>x.BaseType is ComponentBase
cela a provoqué une liste vide de composants Razor et lorsque j'ai appelé CreateFragment(Type typeToDisplay)le typeToDisplay était nul.
Je ne comprends vraiment pas pourquoi builder.OpenComponent(0, null)ne lance pas une NullReferenceException. C'est déroutant pour moi
une erreur aussi stupide de ma part m'a pris beaucoup de nerfs ... j'espère que cela empêchera les autres d'oublier ça :)