【发布时间】:2016-02-24 11:11:59
【问题描述】:
得知 Nancy 有自己的 razor 实现,我有点吃惊,它的行为可能会也可能不会像 razor。在实践中,这会导致问题吗?什么是“大多数人”用于 Nancy 视图引擎?为什么没有使用真正的剃须刀?
【问题讨论】:
-
我不能代表大多数人,但我们使用的是超级简单视图引擎 (SSVE)。
标签: nancy
得知 Nancy 有自己的 razor 实现,我有点吃惊,它的行为可能会也可能不会像 razor。在实践中,这会导致问题吗?什么是“大多数人”用于 Nancy 视图引擎?为什么没有使用真正的剃须刀?
【问题讨论】:
标签: nancy
首先是简单的答案。 Razor 引擎是迄今为止可供 Nancy https://www.nuget.org/packages?q=nancy.viewengines 下载最多的视图引擎
现在是更复杂的问题
为什么没有使用真正的剃须刀?
因为“真实”(我假设您是指 ASP.NET 堆栈使用的那个)Razor 引擎与内置于 ASP.NET 堆栈中的 HTTP 抽象(HttpContext和它所有的朋友),所以没有直接的方法可以与 Nancy 一起使用它。
对此稍长一点的答案是,您必须了解 Razor 确实是一个解析器,而 Razor 视图引擎位于使用者和解析器的中间。
Nancy 使用 Razor 解析器,但我们必须拥有自己的视图引擎,因为这使 Nancy 能够解析和执行 Razor 模板。
现在,它确实变得更加复杂。您在 ASP.NET Razor 视图引擎中看到的许多功能,例如母版页、partials、各种帮助程序、_ViewStart 等,都不是 Razor(解析器)功能,而是已构建的附加功能集进入视图引擎(您几乎可以将其视为中间件)。
这意味着对于我们的引擎,我们必须重新实现其中大部分功能,因为这是 Razor 视图引擎所期望的。
我想指出,如果可能的话,我们很乐意放弃我们自己的实现并使用由 Microsoft 构建的实现(我们需要维护的代码更少,这意味着我们将 100% 支持相同的功能集),但不幸的是,这不是我们要做的决定.. 恐怕我们不能依赖它们的抽象
希望这能解决问题
/A
【讨论】:
我们使用 Nancy 的 Razor 实现已经有一段时间了。我们遇到了一些问题,这些问题让我们要么改用 SSVE,要么放弃 Nancy(我们真的很喜欢 Nancy)。
Razor 的第一个问题是您无法像在 MVC 中那样预编译视图,这会导致启动时间更长。我们对此有很多投诉。
第二个问题是,在使用 Nancy 的 Razor 实现中似乎存在一个长期存在的错误,这会导致只能通过回收应用程序池来解决的情况。我不是专家,但似乎在加载项目时,当时正在编译和生成一个临时 DLL(这解释了加载时间较慢),但有时会出现无法创建实例的问题.它似乎在这个位置:https://github.com/NancyFx/Nancy/blob/master/src/Nancy.ViewEngines.Razor/RazorViewEngine.cs#L238。基本上 "viewAssembly.GetType("RazorOutput.RazorView")" 在不同的时间都是 NULL,这会导致每个页面上只显示一条错误消息,对于每个用户,在任何时候,修复它的唯一方法是重新加载应用程序(回收应用程序池)
只有我的两分钱,我知道这篇文章比较老,但也许其他人会看到我们遇到的一些问题。我已经打开了一个 GitHub 问题,但该错误对我们来说很难重现,而且它还没有消失。
【讨论】: