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

本文关键字:静态 单例 实例 用户 创建 | 更新日期: 2023-09-27 18:17:30

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

new ReleaseFactory().BuildFeatureSection();
为了改进代码,我想使用静态方法:
ReleaseFactory.BuildFeatureSection()

问题是我害怕发生死锁的可能性。

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

有改进当前语法的好主意吗?

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

ReleaseFactory是一个用于为发布页面创建ViewModels的类。显示的数据不是基于登录的用户,但对每个人都是一样的。在我的网站上,有其他工厂的构造函数通常只需要一个参数。

。: {baseUrl}/功能/{ID}

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

同样,在这种情况下,显示的信息不是基于用户,而是基于当前页面的id。

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

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

public static class Foo
{
    private static object lockingObject = new object();
    public static void DoSomething()
    {
        lock (lockingObject)
        {
            // Do your stuff.
        }
    }
}

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

你最好尝试一下,如果你有工具的话,对代码做一些负载测试,看看哪里出了问题。