如果我们有一个像LoadBalancer
这样的单例类,并且每个ASP.NET
应用程序需要一个实例,那么存储它的位置?
目前,我在Application.Add("LoadBalancer", LoadBalancer.Instance)
的{{1}}中使用了Application_Start()
。
同样Global.asax
对象由Application
创建,每个应用程序根据工作负载有多个实例。另外,我可以在ASP.NET
中声明我static
的{{1}}个实例。
哪个更受欢迎?还有更好的主意吗?
答案 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