为什么我应该为我的存储库或服务使用 AddScoped()
?为什么不是 AddSingleton()
?
我知道它们之间的区别,但不明白为什么我不应该使用单例实例来避免为每个请求创建新对象。
你能解释一下吗(最好有例子:))?
最佳答案
如您所说,您知道其中的区别,所以我不会深入讨论。
您不想为您的存储库或服务添加 Singleton 的原因是因为通常您的存储库和服务被视为“业务逻辑”和“持久性逻辑”。在您的业务逻辑中,您可能有一些正在设置的类级别变量。这些属性对于每个请求都不会不同,它们将在请求之间共享。 (将它们想象成静态属性)。
例子:
假设您有一个用户服务,它将发出请求的用户的用户名设置为类级别变量。
单例逻辑:
现在假设 Bob 向 API 发出请求。用户名将设置为 "Bob"。现在想象一下,约翰同时向 API 发出请求。用户名将设置为“John”。但是因为用户服务是单例的,John 和 Bob 共享同一个实例,这意味着 Bob 的用户名也将设置为“John”。
作用域逻辑:
想象一下与上面完全相同的场景,但是这次当 John 发出请求时,它不会覆盖 bobs 用户名,因为它们是不同的实例。
关于c# - 为什么使用 AddScoped() 而不是 AddSingleton()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72224682/