gpt4 book ai didi

c# - 存储库类可以在 ASP.NET 中限定为单例吗

转载 作者:行者123 更新时间:2023-12-04 05:04:31 24 4
gpt4 key购买 nike

我试图了解 ASP.NET 应用程序中存储库类的范围。我假设它们在请求范围内是线程安全的,因为每个请求都在一个单独的线程上运行。但是让它单例怎么样,这是一个有效的场景。

因为这些类没有状态,只有操作数据的方法,所以执行这些方法的不同线程可能有不同的栈帧。我的理解是否正确,谁能提供更多见解。

interface ICustomerRepository
{
List<Customers> GetAll();
Customer GetById(int id);
}

public class Customer : ICustomerRepository
{
//implement methods

}

最佳答案

将存储库作为并发环境的单例公开是一个的想法。

您可以可能以可安全并发使用的方式实现接口(interface)存储库,但这意味着并发一致性的唯一保证在于实现中的某个地方。没有其他机制可以强制并发调用不会失败,编程语言级别(存储库接口(interface))的契约太弱而无法表达这种要求。

另一方面,如果每个 http 上下文都有自己的实例,则实现细节无关紧要。

我建议您阅读更多关于对象生命周期的内容。单例只是控制生命周期的更一般思想的一个具体例子。您可以拥有具有短暂生命周期的对象,在您的应用程序的生命周期内在单个实例中共享的对象,以及存在于线程上下文或 http 上下文(可能跨越多个线程)中的对象。控制生命周期的方法之一是拥有一个创建实例的工厂。

如果你需要一些简单的东西,你可以有一些看起来像单例但以任意方式控制生命周期的东西:

http://netpl.blogspot.com/2010/12/container-based-pseudosingletons-in.html

关于c# - 存储库类可以在 ASP.NET 中限定为单例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com