我将为我的Razor-Components创建一个Base-Class。 基本类如下:
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();
}
希望这会有所帮助
答案 0 :(得分:0)
首先-谢谢大家的帮助,我非常感谢!
几个小时后休息。 我发现了自己的错误...
我在做什么:我创建了一个加载类型列表的服务,该服务被注入到Razor组件中。
服务代码:
//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-Components之后,组件没有被我的“ MyService”重新检查,因为我在那检查了
x=>x.BaseType is ComponentBase
这导致一个空的Razor组件列表,当我调用CreateFragment(Type typeToDisplay)
时,typeToDisplay为null。
我真的不明白为什么builder.OpenComponent(0, null)
不会引发NullReferenceException。那让我感到困惑
我自己这么愚蠢的错误让我非常紧张...希望这可以防止其他人忘记这个:)