Blazor-Component, BaseClass'tan miras alır
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
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 :)