在ASP.NET应用程序中存储单例实例的最佳实践

时间:2010-12-30 17:23:23

标签: asp.net static global-asax

如果我们有一个像LoadBalancer这样的单例类,并且每个ASP.NET应用程序需要一个实例,那么存储它的位置?

目前,我在Application.Add("LoadBalancer", LoadBalancer.Instance)的{​​{1}}中使用了Application_Start()

同样Global.asax对象由Application创建,每个应用程序根据工作负载有多个实例。另外,我可以在ASP.NET中声明我static的{​​{1}}个实例。

哪个更受欢迎?还有更好的主意吗?

3 个答案:

答案 0 :(得分:3)

如果是单身人士,您为什么要存储在应用程序项目中?当你从应用程序的任何地方使用LoadBalancer.Instance时,是不是应该返回相同的实例?

如果您的站点使用负载平衡或在Web场中,每个服务器都有其Application对象和LoadBalancer.Instance的实例。

答案 1 :(得分:2)

您不必在Application对象中存储单个对象。 Singleton对象的标准实现保持良好。 http://msdn.microsoft.com/en-us/library/ff650316.aspx

但是如果您使用Web Farm是一个不同的故事,您应该将Singleton对象单独托管在不同的服务上,并且所有服务器都应该使用远程处理或WCF从该服务请求对象。

答案 2 :(得分:1)

使用像Castle Windsor这样的IOC容器。 Castle Windsor的默认生活方式是单身人士。

http://www.castleproject.org/container/documentation/v21/usersguide/lifestyles.html