Blazor-Component наследуется от BaseClass
я собираюсь создать базовый класс для моих компонентов Razor. Этот базовый класс выглядит так:
public abstract class ExampleBase : ComponentBase
{
public virtual void Submit()
{
//DoSomething
}
public virtual void Back()
{
//DoSomething else
}
}
мой Blazor-Component наследуется от этого класса
@inherits ExampleBase
<button @onclick="Submit" />
Пока все хорошо, но когда я запускаю свое приложение, и эта страница вот-вот загрузится, я получаю исключение:
[2020-09-29T12: 09: 03.920Z] Ошибка: System.ArgumentException: тип компонента должен реализовывать Microsoft.AspNetCore.Components.IComponent. в Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent (последовательность Int32, тип componentType)
что не так с наследованием от ComponentBase?
Спасибо за вашу помощь
Дополнение: я вызываю свой Razor-Component вот так, и исключение выдает в builder.OpenComponent.
RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}
Надеюсь это поможет
Ответы
Прежде всего - спасибо всем за вашу помощь, я очень признателен!
После нескольких часов перерыва. Я нашел свою ошибку ...
Что я делаю: я создал службу, которая загружает список типов, которые эта служба вводит в Razor-Component.
Код услуги:
//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);
В моем компоненте Razor я отобразил список компонентов Razor, который восстанавливается службой.
@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();
};
}
Теперь моя глупая ошибка ... После того, как я добавил @inherits ExampleBase ко всем моим компонентам Razor, компоненты не были повторно настроены моим "MyService", потому что я проверил там наличие
x=>x.BaseType is ComponentBase
это вызвало пустой список компонентов Razor, и когда я вызвал CreateFragment(Type typeToDisplay)typeToDisplay, был нулевым.
Я действительно не понимаю, почему builder.OpenComponent(0, null)не генерирует исключение NullReferenceException. Это сбивает меня с толку
такая глупая ошибка меня забрала у меня много нервов ... надеюсь, это помешает другим забыть об этом :)