タイトルが示すように、私は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です。