Blazor-Component kế thừa từ BaseClass
tôi sắp tạo Lớp cơ sở cho Linh kiện dao cạo của mình. Lớp cơ sở này trông giống như:
public abstract class ExampleBase : ComponentBase
{
public virtual void Submit()
{
//DoSomething
}
public virtual void Back()
{
//DoSomething else
}
}
Blazor-Component của tôi kế thừa từ lớp này
@inherits ExampleBase
<button @onclick="Submit" />
Cho đến nay rất tốt, nhưng khi tôi khởi động Ứng dụng của mình và Trang này sắp Tải thì tôi nhận được một Ngoại lệ:
[2020-09-29T12: 09: 03.920Z] Lỗi: System.ArgumentException: Loại thành phần phải triển khai Microsoft.AspNetCore.Components.IComponent. tại Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.OpenComponent (trình tự Int32, Loại componentType)
có gì sai khi được kế thừa từ ComponentBase?
Cảm ơn bạn đã giúp đỡ
Bổ sung: Tôi gọi Razor-Component của mình như thế này và Exception ném vào builder .OpenComponent
RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}
Hi vọng điêu nay co ich
Trả lời
Trước hết - Cảm ơn tất cả các bạn đã giúp đỡ, tôi thực sự đánh giá cao!
Sau một vài giờ giải lao. Tôi đã tìm ra sai lầm của chính mình ...
Những gì tôi đang làm: tôi đã tạo một dịch vụ tải một Danh sách Loại Danh sách mà dịch vụ này sẽ được đưa vào Razor-Component.
Mã dịch vụ:
//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);
Trong Razor-Component của tôi, tôi đã hiển thị Danh sách Razor-Component được dịch vụ kiểm tra lại.
@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();
};
}
Bây giờ là sai lầm ngu ngốc của tôi ... Sau khi tôi thêm @inherits ExampleBase vào tất cả các Linh kiện Razor của tôi, các Thành phần đã không được "MyService" của tôi khôi phục lại bởi vì tôi đã kiểm tra ở đó
x=>x.BaseType is ComponentBase
điều này gây ra một Danh sách Razor-Components trống rỗng và khi tôi gọi CreateFragment(Type typeToDisplay)typeToDisplay là rỗng.
Tôi thực sự không hiểu tại sao builder.OpenComponent(0, null)không ném NullReferenceException. Thật là khó hiểu với tôi
một lỗi ngu ngốc như vậy của tôi đã khiến tôi rất lo lắng ... hy vọng điều này sẽ ngăn người khác quên điều này :)