簡體   English   中英

將服務注入到服務器端 Blazor 中的 MainLayout.cs

[英]Injecting services in to the MainLayout.cs in Server-side Blazor

正如標題所暗示的,我正在嘗試將服務注入 Blazor 服務器端的MainLayout頁面。 該服務是一個像這樣注入的 ApplicationDbContext:

@inject ApplicationDbContext context

並像這樣注冊:

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(
        Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);

但是,我收到System.ObjectDisposedException異常。

System.ObjectDisposedException: '無法訪問已處理的對象。 此錯誤的一個常見原因是處理從依賴注入解析的上下文,然后嘗試在應用程序的其他地方使用相同的上下文實例。 如果您在上下文上調用 Dispose() 或將上下文包裝在 using 語句中,則可能會發生這種情況。 如果你使用依賴注入,你應該讓依賴注入容器來處理上下文實例。 對象名稱: “ApplicationDbContext”

第一個頁面加載沒問題,但之后,它會引發此錯誤。 這也會發生在布局頁面中嵌套的任何組件上,但似乎不會發生在頁面本身上。

我通過這樣做解決了這個問題。

  1. 注冊了 DbContext
services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(
        Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
  1. 像這樣將 DbContext 注入到嵌套的 razor 組件中
@inherits OwningComponentBase<ApplicationDbContext>

代替

@inject ApplicationDbContext context
  1. 執行數據庫操作,它神奇地工作。

我希望這可以幫助某人。 討論此問題的票證是AspNetCore存儲庫中的#10448

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM