Blazor-Component hérite de BaseClass

Sep 29 2020

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

JoeGER94 Sep 30 2020 at 04:32

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 :)