제목에서 알 수 있듯이 Blazor 서버 측의 MainLayout
페이지에 서비스를 주입하려고합니다. 서비스는 다음과 같이 주입되는 ApplicationDbContext입니다.
@inject ApplicationDbContext context
다음과 같이 등록됩니다.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(
Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
그러나 System.ObjectDisposedException
예외가 발생합니다.
System.ObjectDisposedException : '배치 된 개체에 액세스 할 수 없습니다. 이 오류의 일반적인 원인은 종속성 주입에서 해결 된 컨텍스트를 배치 한 후 나중에 애플리케이션의 다른 위치에서 동일한 컨텍스트 인스턴스를 사용하려고 시도하기 때문입니다. 컨텍스트에서 Dispose ()를 호출하거나 컨텍스트를 using 문으로 래핑하는 경우에 발생할 수 있습니다. 의존성 주입을 사용하는 경우 의존성 주입 컨테이너가 컨텍스트 인스턴스를 처리하도록해야합니다. 개체 이름 : 'ApplicationDbContext' . '
첫 페이지로드는 정상이지만 그 후에는이 오류가 발생합니다. 이것은 레이아웃 페이지 내에 중첩 된 구성 요소에서도 발생하지만 페이지 자체에서는 발생하지 않는 것 같습니다.
이 작업을 수행하여 문제를 해결했습니다.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(
Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
@inherits OwningComponentBase<ApplicationDbContext>
대신에
@inject ApplicationDbContext context
이것이 누군가를 도울 수 있기를 바랍니다. 이 문제에 대해 설명하는 티켓은 AspNetCore 리포지토리에서 # 10448 입니다.