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