Asp.Net Singleton数据访问层

时间:2013-01-08 15:36:23

标签: asp.net asp.net-mvc-4

我一直在玩MVC4,我创建了一个目前是单身的数据访问层。

我的问题是,这是一个好主意吗?我在我的图层中有一个轮询方法,这是我使它成为单例的主要原因(此轮询方法检查数据库,然后使用signalr更新UI)

我还认为使用单例是一个好主意,所以我可以缓存数据,但我现在不确定,这个单独应对400个并发用户怎么办?

任何帮助都会很棒!

代码 -

  public class DataAccessLayer
{
    private static DataAccessLayer _instance;

    public static DataAccessLayer Instance
    {
        get
        {
            lock (_instance)
            {
                if (_instance == null)
                    _instance = new DataAccessLayer();

                return _instance;
            }
        }
    }

}

public class HomeController : Controller
{
    public ActionResult GetUsers()
    {
        return View(DataAccessLayer.Instance.GetUsers());
    }
}

2 个答案:

答案 0 :(得分:2)

您必须使用单例或静态类处理线程问题。锁定会有所帮助,但它会使事情变慢,特别是因为您没有检查实例是否已在锁定之前设置。

此外,单元测试代码也很困难。

我建议使用构造函数在控制器中设置DataAccessLayer的实例。可以使用IoC容器或自定义控制器工厂来创建类实例并将其传递给控制器​​。

为了更容易进行单元测试/模拟,为具体类实现一个IDataAccessLayer接口,并将其用作控制器构造函数中的参数类型。

答案 1 :(得分:-1)

在这种情况下,单身人士不是必需的。使用DataAccessLayer作为静态类更适合:

public class HomeController : Controller
{
    public ActionResult GetUsers()
    {
        return View(DataAccessLayer.GetUsers());
    }
}