我对MVC3视图页面激活器以及视图的更改如何触发重新编译有疑问。在BuildManager中似乎有一些神奇的东西我看不到,因为源代码不适用于符号 - 甚至反射器也看不到内部。
我所做的是实现我自己的VPP和Razor视图引擎的子类,以显示不存在于文件系统上的剃刀视图。我的模拟设置只返回字符串中的数据进行渲染。这工作正常,但不起作用的是当您更改该数据时,不会重新编译该类。目前还不清楚如何让RazorBuildProvider或BuildManager重新生成c#代码,并在从VPP返回的数据不同时重新编译它。
答案 0 :(得分:2)
虽然GetCacheDependency确实是默认工作方式(并且marcind指出),但在使用自定义文件存储时,通常无法提供CacheDependency对象。
相反,您需要做的是从GetCacheDependency返回null。但是你做需要实现GetFileHash才能使失效正常工作。您返回的哈希需要基于所有文件的内容。
每当您返回的哈希值与上次查询页面时的哈希值不同时,页面最终会重新编译。
当然,你应该确保如果文件没有改变你继续返回相同的哈希值,否则页面将不断重新编译,使得速度极慢。
答案 1 :(得分:0)
在您的VPP中,您需要覆盖GetCacheDependency()
方法,您需要从该方法返回适当的CacheDependency
对象。看看它的构造函数是否可以监视(比如文件或目录)。如果文件内容位于SQL Server实例中,也可以使用SqlCacheDependency
。