在我所做的几个.NET C#webservice项目中,我借助单例模式访问了db static。然后前几天我的朋友告诉我这是一件坏事,因为如果对同一个db实体提出了很多请求,那么db会因为静态实例而被锁定。我朋友的假设是对的吗?我以为每个新请求都会成为该类的新实例?
单例类的实现如下所示:
public class WebService
{
private readonly IFactory _factory;
public WebService(IFactory factory)
{
_factory = factory;
}
public IDataRepository Data
{
get
{
return _factory.GetDatabase();
}
}
}
public static class WebServiceImpl
{
private static readonly WebService _webService = new WebShop(new WebserviceFactoryImpl());
public static WebService webService { get { return _webService; } }
}
_factory.GetDatabase()返回Database类的新实例。
答案 0 :(得分:2)
查看WebServiceImpl
,所有来电都将共享一个WebService
个实例。现在,这不是必然问题,具体取决于实现方式;例如,如果_factory.GetDatabase();
最终被按请求调用,则可能是您正在逃避它。进一步取决于GetDatabase()
的作用 - 即它是否每次调用获得一个新实例?或者它每次都给你相同的实例?简单地说:我们没有足够的信息可以完全回答。但是:
对数据库进行静态访问不一定是个问题;这一切都归结为如何实现 - 例如,基于静态的API仍然可以在每次调用时创建(和配置)连接。