我有一个n层应用程序。前端是一个MVC站点(如果这有所不同)。 MVC站点,业务逻辑和DAL都可以访问特定的共享DLL,其中定义了Singleton类。
这一切都有效,好像我分配了" foo"在DAL中的Singleton的属性Bar
中,前端将看到" foo"当它访问Bar
时。
问题是, else 可以看到Singleton?如果另一个用户登录到我的MVC应用程序,那么该页面将Bar
属性设置为" Fred"。我的第一个用户在访问Bar
时会看到什么。
Singleton真的是该类的唯一实例吗?或者它是给定用户的该类的唯一实例?
如果第一个用户在同一个应用程序的浏览器中打开另一个窗口怎么办?如果他导致Bar
在一个窗口中被更改,那么它是否在另一个窗口中被更改了?
答案 0 :(得分:0)
问题是,还有什么可以看到Singleton?如果是其他用户 登录到我的MVC应用程序和页面设置栏的页面 属于“弗雷德”的财产。我的第一个用户在访问Bar时会看到什么。
所有用户都会看到最后一个值。 (在你的例子中是“弗雷德”)
Singleton真的是该类的唯一实例吗?或者就是这样 只有给定用户的那个类的实例?
它是跨线程的唯一类实例。如果您的Web应用程序在多个工作线程中运行,则您将拥有多个实例。
如果第一个用户在浏览器中打开另一个窗口怎么办? 相同的应用程序?如果他导致Bar在一个窗口中被更改,那就是它 在另一个改变了吗?
当您谈论“网络应用程序”时,术语“窗口”并不是那么好。每个窗口都由请求创建。并且每个请求都可以更改您的单例对象值。