在 ASP.NET 应用程序中存储单例实例的最佳实践
如果我们有一个像 LoadBalancer 这样的单例类,并且每个 ASP.NET 应用程序需要一个实例,那么将它存储在哪里?
目前,我在 Global.asax
的 Application_Start()
中使用 Application.Add("LoadBalancer", LoadBalancer.Instance)
。
此外,Application
对象是由 ASP.NET
创建的,并且每个应用程序根据工作负载有多个实例。我还可以在 Global.asax
中声明我的 LoadBalancer
的 static
实例。
哪个是首选?还有更好的主意吗?
If we have a singleton class like LoadBalancer
and need one instance per ASP.NET
application, then where to store it ?
Currently I use Application.Add("LoadBalancer", LoadBalancer.Instance)
in Application_Start()
in Global.asax
.
Also Application
object is created by ASP.NET
and there are multiple instances per application based on workload. Also I can declare a static
instance of my LoadBalancer
in Global.asax
.
Which is preferred ? Any better idea ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果是单例为什么要存储在应用程序项中?当您从应用程序中的任何位置使用 LoadBalancer.Instance 时,它不应该返回相同的实例吗?
如果您的站点正在使用负载平衡或位于网络场中,则每个服务器都将拥有其 Application 对象和 LoadBalancer.Instance 的实例。
If it is a Singleton why do you want to store in Application items? Isn't it supposed to return the same instance when you use LoadBalancer.Instance from anywhere in the application?
In case your site is using load balancing or is ina web farm each server would have its instance of Application object and LoadBalancer.Instance.
您不必在应用程序对象中存储单例对象。 Singleton 对象的标准实现仍然有效。 http://msdn.microsoft.com/en-us/library/ff650316.aspx
但是,如果您使用 Web Farm,情况就不同了,您应该将 Singleton 对象单独托管在不同的服务上,并且所有服务器都应该使用 Remoting 或 WCF 向该服务请求该对象。
You dont have to store a singleton object in Application object. Standard implementation of Singleton object holds good. http://msdn.microsoft.com/en-us/library/ff650316.aspx
But if you using a Web Farm its a different story, you should have the Singleton object hosted seperately on a different service and all the servers should request the object from that service using Remoting or WCF.
使用 IOC 容器,例如温莎城堡。温莎城堡的默认生活方式是单身。
http://www.castleproject.org/container/documentation/v21/usersguide /lifestyles.html
Use an IOC container like Castle Windsor. The default lifestyle in Castle Windsor is singleton.
http://www.castleproject.org/container/documentation/v21/usersguide/lifestyles.html