Blazor-Component, BaseClass'tan miras alır

Sep 29 2020

Razor Bileşenlerim için bir Temel Sınıf oluşturmak üzereyim. Bu Temel Sınıf şuna benzer:

public abstract class ExampleBase : ComponentBase 
{
    public virtual void Submit()
    {
        //DoSomething
    }

    public virtual void Back()
    {
        //DoSomething else
    }
}

Blazor-Bileşenim bu sınıftan miras alıyor

@inherits ExampleBase

<button @onclick="Submit" />

Şimdiye kadar her şey yolunda, ancak Uygulamamı başlattığımda ve bu Sayfa Yüklenmek üzereyken bir İstisna alıyorum:

[2020-09-29T12: 09: 03.920Z] Hata: System.ArgumentException: Bileşen türü Microsoft.AspNetCore.Components.IComponent uygulamalıdır. Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent (Int32 dizisi, Type componentType)

ComponentBase'den miras alınmanın nesi yanlış?

Yardımınız için teşekkürler

Ekleme: Razor-Component'imi bu şekilde çağırıyorum ve Exception builder.OpenComponent'e atıyor.

RenderFragment CreateFragment() => builder =>
{
  builder.OpenComponent(0, typeof(MyRazorComponent));
  builder.CloseComponent();
}

Bu yardımcı olur umarım

Yanıtlar

JoeGER94 Sep 30 2020 at 04:32

Her şeyden önce - Yardımınız için hepinize teşekkür ederim, gerçekten minnettarım!

Birkaç saatlik aradan sonra. Kendi hatamı buldum ...

Ne yapıyorum: Bu hizmetin bir Razor Bileşenine enjekte ettiği bir Tür Listesi Listesi yükleyen bir hizmet oluşturdum.

Hizmet kodu:

//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
            .Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
            .DefinedTypes.Where(x=>x.BaseType is ComponentBase);

Razor-Component'imde, hizmet tarafından geri gönderilen Razor-Component Listesini görüntüledim.

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

Şimdi aptalca hatam ... @inherits ExampleBase'i tüm Razor-Bileşenlerime ekledikten sonra, Bileşenler "MyService" tarafından yeniden yapılandırılmadı çünkü orada kontrol ettim

x=>x.BaseType is ComponentBase 

bu boş bir Razor Bileşenleri Listesi'ne neden CreateFragment(Type typeToDisplay)oldu ve typeToDisplay'i çağırdığımda null oldu.

Neden builder.OpenComponent(0, null)bir NullReferenceException oluşturmadığını gerçekten anlamıyorum . Bu benim için kafa karıştırıcı

Kendi kendime böyle aptalca bir hata beni çok sinirlendirdi ... umarım bu başkalarının bunu unutmasını engeller :)