Blazor-Component는 BaseClass에서 상속

Sep 29 2020

내 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();
}

도움이 되었기를 바랍니다

답변

JoeGER94 Sep 30 2020 at 04:32

우선-도와 주셔서 감사합니다. 정말 감사합니다!

몇 시간 휴식 후. 내 실수를 발견했습니다 ...

내가하는 일 :이 서비스가 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을 던지지 않는지 이해 하지 못한다. 나에게 혼란스러워

내 자신에 의한 그런 어리석은 오류는 나를 많은 신경을 썼다 ... 이것이 다른 사람들이 이것을 잊는 것을 막기를 바랍니다