顧名思義,我正在嘗試將服務注入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 。