0

在.NET中的核心,有三種不同的生命週期可以使用:TransientScopedSingleton終身鏈中的依賴注入

假設我有depencency注射服務下列鏈:

Service A>Service B>Service C

意味着Service AService B注入(例如Service A取決於Service B)和Service BService C注入。

現在考慮有Service B一個Singleton壽命,並且具有Transient一生Service C。由於Service BSingleton,因此只能創建一次。 Service CTransient,但由於Service BSingleton,仍然是剛剛創建Service C一次爲好。

這個論證是否正確,因此我設定的生命期爲Service C沒有意義?或者我在這裏錯誤地思考?

回答

2

你所描述這裏是被稱爲Captive Dependency一個共同的問題。服務C變得俘虜,因爲它的消費者的壽命更長。

這個問題是普遍存在的,是錯誤的使用依賴注入和DI容器應用中的常見原因。當應用程序增長時,這些問題很容易被漏檢。根據經驗,我可以說追溯到這種錯誤配置的錯誤可能需要很長時間。

不幸的是,.NET Core的內置容器沒有檢測並防止這類錯誤。其他一些更成熟的用於.NET的DI庫實際上具有這些功能,可以檢測和防止這些錯誤配置。

+0

我明白了,你解釋的感謝! – Froodooo