【问题标题】:Is this html helper thread safe?这个 html 辅助线程安全吗?
【发布时间】:2011-09-30 09:01:36
【问题描述】:

我想知道作为此链接上接受的答案引用的代码是否是线程安全的。我的意思不是多线程。我只是不想输出跨用户页面请求。
Add CSS or JavaScript files to layout head from views or partial views

我是否会遇到这样一种情况,即对一个页面的许多请求可能会跨越样式和脚本。

如果您了解 MVC 可能会有所帮助,因为在渲染视图时调用 add 方法并将结果渲染到布局(母版页)。

当前解决方案(如果需要改进,请告诉我)

public static MyCompanyHtmlHelpers GetInstance(HtmlHelper htmlHelper)
{
    MyCompanyHtmlHelpers _instance;
    if (htmlHelper.ViewData["SectionHelper"] == null)
    {
        _instance = new MyCompanyHtmlHelpers();
        htmlHelper.ViewData["SectionHelper"] = _instance;
    }
    else
        _instance = htmlHelper.ViewData["SectionHelper"] as MyCompanyHtmlHelpers;

    _instance.SetHtmlHelper(htmlHelper);

    return _instance;
}

谢谢

【问题讨论】:

  • @Konrad 许多许多请求使用相同的AppDomain
  • answer已更新

标签: c# asp.net-mvc-3 thread-safety


【解决方案1】:

嗯....在我看来不像;p

HtmlHelper 有一些实例属性,特别是ViewContextViewData(通过ViewDataContainer)等。把它放在任何地方static 是一个非常糟糕的主意。

有了正在编写的基本代码,您可能会侥幸成功,但是:IMO 这仍然是一个非常糟糕的主意。很好看。

【讨论】:

  • 该死,我真的很喜欢这个解决方案。可以让它成为线程安全的吗?
  • @Valams 特别是,助手的 ViewContext 有一个 HttpContext;从那里你可以存储任何东西。 那个是我在这里用来存储的。
  • 非常感谢!我现在正在研究如何做到这一点,因为我没有太多曝光。
  • @Valamas,@Marc 抱歉回复晚了(我当时正在度假)。几周前,我们意识到代码不是线程安全的。所以我改变了静态/单例实现,我们将实际实例存储在当前的 HttpContext 中。与此同时,我开始着手处理一个简单的资产处理项目。您可以在这里查看:github.com/speier/AssetBox 这很像一个实验,它是我们在工作场所使用的当前解决方案的基础。让我知道你的想法。
  • 对更新问题没有太大帮助,因此接受的答案不再有意义......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多