C# 这个html助手是线程安全的吗?
我想知道这个链接上被引用为可接受答案的代码是否是线程安全的。我的意思是不支持多线程。我只是不希望输出跨用户页面请求。C# 这个html助手是线程安全的吗?,c#,asp.net-mvc-3,thread-safety,C#,Asp.net Mvc 3,Thread Safety,我想知道这个链接上被引用为可接受答案的代码是否是线程安全的。我的意思是不支持多线程。我只是不希望输出跨用户页面请求。 我会遇到这样一种情况:对一个页面的许多请求可能会跨越样式和脚本 如果您了解MVC,在呈现视图时调用add方法,并将结果呈现到布局(母版页)中,这可能会有所帮助 当前解决方案(请告知是否需要改进) 谢谢嗯。。。。在我看来不是这样的;p HtmlHelper具有一些实例属性,特别是ViewContext和ViewData(通过ViewDataContainer)等。将其放置在静态的
我会遇到这样一种情况:对一个页面的许多请求可能会跨越样式和脚本 如果您了解MVC,在呈现视图时调用add方法,并将结果呈现到布局(母版页)中,这可能会有所帮助 当前解决方案(请告知是否需要改进)
谢谢嗯。。。。在我看来不是这样的;p
HtmlHelper
具有一些实例属性,特别是ViewContext
和ViewData
(通过ViewDataContainer
)等。将其放置在静态的任何位置都是一个糟糕的想法
对于正在进行的基本代码,您可能会侥幸逃脱,但是:在我看来,这仍然是一个非常糟糕的想法。很好的发现。@Konrad许多请求使用相同的AppDomain
原始已更新。我非常喜欢此解决方案。它能成为线程安全的吗?@Valams特别是,助手的ViewContext有一个HttpContext;从这里你可以储存任何东西。这就是我在这里储存的东西。非常感谢!我现在正在研究如何做,因为我没有太多的曝光。@Valamas,@Marc很抱歉回复太晚(我在度假)。几周前,我们意识到代码不是线程安全的。因此,我更改了静态/单例实现,并将实际实例存储在当前HttpContext中。同时,我也开始做一个简单的项目来处理资产。你可以看看这里:这很像一个实验,它是我们在我的工作场所使用的当前解决方案的基础。让我知道你是怎么想的。更新这个问题,使被接受的答案不再有意义,这并没有太大帮助。。。
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;
}