Elv*_*vis 3 c# dependency-injection asp.net-core
为什么我应该用于AddScoped()
我的存储库或服务?为什么不AddSingleton()
?我知道它们之间的差异,但不明白为什么我不应该使用单例实例来避免为每个请求创建新对象。你能解释一下吗(最好用例子:))?
小智 8
正如你所说,你知道其中的区别,所以我不会深究。
您不想为您的存储库或服务添加 addSingleton 的原因是因为您的存储库和服务通常被视为“业务逻辑”和“持久性逻辑”。在您的业务逻辑中,您可能有一些正在设置的类级别变量。这些属性对于每个请求都不会不同,它们将在请求之间共享。(将它们视为静态属性)。
例子:
想象一下,您有一个用户服务,它将发出请求的用户的用户名设置为类级别变量。
单例逻辑:
现在假设 Bob 向 api 发出请求。用户名将设置为“Bob”。现在想象一下,与此同时,John 向 api 发出请求。用户名将设置为“John”。但由于用户服务是单例,John 和 Bob 共享同一个实例,这意味着 Bob 的用户名也将设置为“John”。
范围逻辑:
想象一下与上面完全相同的场景,但是这次当 John 发出请求时,它不会覆盖 bob 用户名,因为它们是不同的实例。
归档时间: |
|
查看次数: |
8146 次 |
最近记录: |