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 sequence, Type componentType)에서
ComponentBase에서 상속되는 것이 잘못된 것은 무엇입니까?
당신의 도움을 주셔서 감사합니다
추가 : 나는 이와 같이 내 Razor-Component를 호출 하고 빌더에서 예외가 발생합니다.
RenderFragment CreateFragment() => builder =>
{
builder.OpenComponent(0, typeof(MyRazorComponent));
builder.CloseComponent();
}
도움이 되었기를 바랍니다
답변
우선-도와 주셔서 감사합니다. 정말 감사합니다!
몇 시간 휴식 후. 내 실수를 발견했습니다 ...
내가하는 일 :이 서비스가 Razor 컴포넌트에 주입되는 유형 목록 목록을로드하는 서비스를 만들었습니다.
서비스 코드 :
//this returns a listOfRazorComponents
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.StartsWith("SampleApplication")).FirstOrDefault()
.DefinedTypes.Where(x=>x.BaseType is ComponentBase);
내 Razor-Component에서 서비스에 의해 returend되는 Razor-Component 목록을 표시했습니다.
@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();
};
}
이제 내 어리석은 실수 ... 내 모든 Razor 구성 요소에 @inherits ExampleBase를 추가 한 후 구성 요소가 내 "MyService"에 의해 재구성되지 않았습니다.
x=>x.BaseType is ComponentBase
이로 인해 Razor-Components의 빈 목록이 발생 CreateFragment(Type typeToDisplay)했으며 typeToDisplay를 호출했을 때 null이되었습니다.
나는 왜 builder.OpenComponent(0, null)NullReferenceException을 던지지 않는지 이해 하지 못한다. 나에게 혼란스러워
내 자신에 의한 그런 어리석은 오류는 나를 많은 신경을 썼다 ... 이것이 다른 사람들이 이것을 잊는 것을 막기를 바랍니다