首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC Razor ViewEngine不是线程安全的?

MVC Razor ViewEngine不是线程安全的?
EN

Stack Overflow用户
提问于 2011-02-19 06:16:47
回答 2查看 1.3K关注 0票数 5

我目前有一个.net mvc3应用程序,它负责管理多个位置的相似视图,这些位置也使用相同的控制器,例如site1/v1/views/index.cshtmlsite1/v2/views/index.cshtml

处理这种情况的方法是创建一个继承自DefaultControllerFactory的CustomControllerFactory,在CreateController方法中,清除现有的视图引擎并添加一个新的自定义viewEngine,该url指定基于当前url的视图位置格式。

如果用户登录site1.com/v1/index.cshtml,viewengine将指定以下内容的视图位置:

代码语言:javascript
复制
string versionDirectory = "v1";
ViewLocationFormats = new[]{ versionDirectory + "/Views/{0}.cshtml",
                             "/Views/{0}.cshtml",
                             "~/Shared/{0}.cshtml"
                            };

我遇到的问题是,如果多个用户在大致相同的时间登陆不同的页面,所有用户都会看到相同的视图。

Initially i thought this was related to caching,但在自定义viewEngine中显式设置usecache = false之后,这似乎与ViewEngines class not being thread safe有更多关系。

有没有人对我如何以不同的方式实现同样的结果有什么想法?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-19 12:56:41

ViewEngines集合是一个静态集合,因此它的值在请求之间共享。你尝试做的事情是可能的,但你做的方式是不正确的。

一种简单的方法是编写一个从RazorViewEngine派生的自定义视图引擎并覆盖FindView方法。该方法在每个请求中调用一次。在您的实现中,调用base.FindView,然后修改结果(如果它不为空)以包含所需的站点信息。

Scott Hanselman有一篇博客文章,展示了通过自定义视图引擎在另一个位置查找视图的一个示例。http://www.hanselman.com/blog/ABetterASPNETMVCMobileDeviceCapabilitiesViewEngine.aspx

票数 9
EN

Stack Overflow用户

发布于 2011-02-19 14:25:15

内置的视图引擎是线程安全的。你的问题是缓存或者你的自定义视图引擎。检查另一个答案中链接中的缓存注释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5047172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档