[解決済み] ASP.NET CoreはDI設定後にシングルトンを初期化する
2023-07-11 16:22:50
質問
例えば、以下のようなシングルトンクラスのインスタンスをDIに登録するとします。
services.AddSingleton<IFoo, Foo>();
そして、仮に
Foo
クラスが他の多くの依存関係(主にデータをロードするためのリポジトリクラス)を持っているとします。
私の現在の理解では、Fooインスタンスは最初に使用される(asked)まで作成されません。コンストラクター以外にこのクラスを初期化する方法はありますか?例えば
ConfigureServices()
が完了した直後とか?それとも初期化コード(dbからデータをロードする)はFooのコンストラクタで行うべきでしょうか?
(このクラスが初回使用前にデータをロードして、初回アクセスを高速化できればいいのですが...)
どのように解決するのですか?
起動時に自分で行う。
var foo = new Foo();
services.AddSingleton<IFoo>(foo);
または "温める"。
public void Configure(IApplicationBuilder app)
{
app.ApplicationServices.GetService<IFoo>();
}
または、その代わりに
public void Configure(IApplicationBuilder app, IFoo foo)
{
...
}
しかし、コンストラクタでやってはいけないことをやってしまうと、これは単に汚いだけで、むしろ設計に問題があるように感じられます。クラスのインスタンス化は高速でなければならず、その中で長時間実行される操作を行うと、多くのベストプラクティスに反することになり、それを回避する方法を探すのではなく、コードベースをリファクタリングする必要があります。
関連
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Swiftでdispatch_onceのシングルトンモデルを使う
-
[解決済み] ASP.NET CoreでカスタムのAuthorizeAttributeを作成する方法は?
-
[解決済み] ConfigureServices内からASP.NET Core DIでインスタンスを解決する
-
[解決済み】C++ シングルトンデザインパターン
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である