ASP.NET Core 2.0 にアップグレードすると、シングルトン IActiveUsersService からスコープ付きサービス IMongoDbContext を消費できない。
2023-08-19 16:35:44
質問
今日、あるプロジェクトをASP.NET Core 2にアップデートしたところ、以下のエラーが発生しました。
シングルトンIActiveUsersServiceからスコープされたサービスIMongoDbContextを消費することができません。
以下のような登録をしています。
services.AddSingleton<IActiveUsersService, ActiveUsersService>();
services.AddScoped<IMongoDbContext, MongoDbContext>();
services.AddSingleton(option =>
{
var client = new MongoClient(MongoConnectionString.Settings);
return client.GetDatabase(MongoConnectionString.Database);
})
public class MongoDbContext : IMongoDbContext
{
private readonly IMongoDatabase _database;
public MongoDbContext(IMongoDatabase database)
{
_database = database;
}
public IMongoCollection<T> GetCollection<T>() where T : Entity, new()
{
return _database.GetCollection<T>(new T().CollectionName);
}
}
public class IActiveUsersService: ActiveUsersService
{
public IActiveUsersService(IMongoDbContext mongoDbContext)
{
...
}
}
DI がサービスを消費できないのはなぜですか?ASP.NET Core 1.1ではすべて正常に動作しています。
どのように解決するのですか?
ライフタイムが小さいサービスを使うことはできません。Scopedサービスはリクエストごとにしか存在しませんが、Singletonサービスは一度作成されればインスタンスは共有されます。
これで、1つのインスタンスだけが
IActiveUsersService
はアプリ内に1つだけ存在します。しかし、それは
MongoDbContext
に依存したいのですが、これは Scoped であり、リクエストごとに作成されます。
のどちらかにする必要があります。
-
作る
MongoDbContext
をシングルトンにする、または -
作る
IActiveUsersService
スコープ付き、または -
パス
MongoDbContext
を関数の引数としてユーザサービスに渡す
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] ConfigureServices内からASP.NET Core DIでインスタンスを解決する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である