Nancy的视图引擎是否达成共识?

时间:2016-02-24 11:12:00

标签: nancy

我有点惊讶地发现Nancy有自己的剃刀实现,可能会或可能不会像剃刀一样。在实践中,这会导致问题吗?什么是#34;大多数人"用于南希视图引擎?为什么不使用真正的剃刀?

2 个答案:

答案 0 :(得分:14)

首先是简单的答案。到目前为止,Razor引擎是Nancy https://www.nuget.org/packages?q=nancy.viewengines

可用的下载量最多的视图引擎

现在提出更复杂的问题

  

为什么不使用真正的剃须刀?

因为“真实”(并且通过实际我将假设您的意思是ASP.NET堆栈使用的那个)Razor引擎与ASP.NET堆栈中内置的HTTP抽象相关联(HttpContext)和所有的朋友一起)所以没有直接的方式与南希一起使用。

稍微长一点的答案是你必须明白Razor实际上是一个解析器而Razor视图引擎位于消费者和解析器的中间。

Nancy使用Razor解析器,但我们必须拥有自己的视图引擎,因为这使得Nancy能够解析并执行Razor模板。

现在,它确实变得更加复杂。您在ASP.NET Razor视图引擎中看到的许多功能(例如母版页,部分,各种帮助程序,_ViewStart等)都不是Razor(解析器)功能,但它们是已构建的附加功能集进入视图引擎(你几乎可以把它当作中间件)。

这意味着对于我们的引擎,我们必须重新实现其中的大部分功能,因为这是Razor视图引擎所期望的。

我想指出的是,如果有可能的话,那么我们很乐意放弃我们自己的实现并使用微软构建的实现(我们需要维护更少的代码,这意味着我们将支持100%相同的功能集),但不幸的是,这不是我们做出的决定..我们不能依赖他们的抽象我害怕

希望这可以解决问题

/ A

答案 1 :(得分:1)

我们一直在使用Nancy的Razor实现。我们遇到了一些让我们转向SSVE或放弃南希的问题(我们真的很喜欢南希)。

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问题,但这个bug很难为我们重现,而且它没有去过任何地方。