0

.NETコアには、Transient,ScopedおよびSingletonという3つの異なるライフタイムが使用できます。連鎖依存性インジェクションの寿命

のは、私がdepencency-注入したサービスの以下のチェーンを持っていると仮定しましょう:>Service C

Service A>Service B

Service AService B注射した(例えばService AService Bに依存)とService Bが注入Service Cを有することを意味します。

Service Bは、Singletonの有効期間を持ち、Service Cの有効期間はTransientです。 Service BSingletonなので、一度だけ作成されます。 Service CTransientですが、Service BSingletonなので、まだService Cが作成されています。

この引数は正しいので、Transientの生涯をService Cに設定しても意味がありませんか?それとも私はここで間違って考えていますか?

答えて

2

ここでは、Captive Dependencyという共通の問題について説明します。サービスCは、消費者の寿命が長いため、非公開になります。

この問題は広く発生しており、依存性注入とDIコンテナを使用するアプリケーションの一般的なバグの原因です。アプリケーションが成長すると、これらの問題は検出されずに簡単にスリップする可能性があります。経験から、このような誤った設定にバグを追跡すると時間がかかることがわかります。

.NET Coreのビルトインコンテナは、この種の間違いを検出して防止しません。 .NET向けの他のより成熟したDIライブラリの中には、実際には、こうした種類の誤設定を検出して防止するこれらの種類の機能があります。

+0

あなたの説明に感謝します。 – Froodooo

関連する問題