为每个用户创建不同的静态单例实例

时间:2014-08-11 09:49:01

标签: c# asp.net-mvc web static singleton

我正在使用ASP.NET MVC开发一个网站,我有很多像这样的指令:

new ReleaseFactory().BuildFeatureSection();

为了改进我认为使用静态方法的代码:

ReleaseFactory.BuildFeatureSection()

问题是我害怕发生僵局的可能性。

这些方法经常访问不同的数据源(例如Excel文档,数据库等),据我所知,通过静态方法访问它们并不是一个好主意,特别是在开发Web应用程序时。

改善当前语法有什么好主意吗?

编辑:有关发布工厂目的的更多信息。

ReleaseFactory是一个用于为Release页面创建ViewModel的类。显示的数据不是基于记录的用户,而是对每个人都相同。在我的网站上还有其他工厂有一个构造函数,通常只需要一个参数。

例如:{baseUrl} / Feature / {ID}

public ActionResult BetaProgram(int id)
{  
       var viewModel = new FeatureFactory(id).BuildFeatureViewModel();

       return View(viewModel);
}

同样在这种情况下,显示的信息不是基于用户,而是基于当前页面的id。希望这有助于更好地了解情况。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的代码,我最好的建议是使用锁定,例如

public static class Foo
{
    private static object lockingObject = new object();

    public static void DoSomething()
    {
        lock (lockingObject)
        {
            // Do your stuff.
        }
    }
}

这是一个简单的例子,可能就足够了,不确定。基本上,您一次阻止访问lock语句内运行的代码到一个线程。这可以消除死锁,因为一次只有一个线程可以执行lock语句中的代码。

最好的办法是尝试这个,如果你有工具,可以对代码进行一些负载测试,看看有什么破坏。