Blazor-Component mewarisi dari BaseClass
saya akan membuat Base-Class untuk Razor-Components saya. Kelas Dasar ini terlihat seperti:
public abstract class ExampleBase : ComponentBase
{
public virtual void Submit()
{
//DoSomething
}
public virtual void Back()
{
//DoSomething else
}
}
Komponen Blazor saya mewarisi dari kelas ini
@inherits ExampleBase
<button @onclick="Submit" />
Sejauh ini bagus, tetapi ketika saya memulai Aplikasi saya dan Halaman ini akan dimuat maka saya menerima Pengecualian:
[2020-09-29T12: 09: 03.920Z] Kesalahan: System.ArgumentException: Jenis komponen harus menerapkan Microsoft.AspNetCore.Components.IComponent. di Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent (urutan Int32, Jenis componentType)
apa yang salah jika diwarisi dari ComponentBase?
Terima kasih atas bantuan Anda
Penambahan: Saya menyebut Razor-Component saya seperti ini dan Exception melempar ke builder.OpenComponent
RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}
Semoga ini membantu
Jawaban
Pertama-tama - Terima kasih atas bantuan Anda, saya sangat menghargai!
Setelah istirahat beberapa jam. Saya menemukan kesalahan saya sendiri ...
Apa yang saya lakukan: saya telah membuat layanan yang memuat Daftar Jenis Daftar layanan ini mendapat suntikan dalam Komponen-Razor.
Kode layanan:
//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);
Di Razor-Component saya, saya telah menampilkan Daftar Razor-Component yang digunakan kembali oleh layanan.
@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();
};
}
Sekarang kesalahan bodoh saya ... Setelah saya menambahkan @inherits ExampleBase ke semua Razor-Components saya, Komponen tidak dikenali oleh "MyService" saya karena saya memeriksanya di sana
x=>x.BaseType is ComponentBase
ini menyebabkan List of Razor-Components kosong dan ketika saya memanggil CreateFragment(Type typeToDisplay)typeToDisplay adalah null.
Saya benar-benar tidak mengerti mengapa builder.OpenComponent(0, null)tidak melempar NullReferenceException. Itu membingungkan saya
kesalahan bodoh seperti itu sendiri membuat saya sangat gugup ... harap ini akan mencegah orang lain melupakan ini :)