我正在使用ASP.NET MVC CORE.我已经实现了自己的ViewLocationExpander,这样我就可以按照我想要的方式构建项目,并将我的视图放在我喜欢的位置.
这是通过实现一个继承的类来实现的,IViewLocationExpander并且大多数工作都在以下方法中进行:
ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
Run Code Online (Sandbox Code Playgroud)
一切都工作得很好,但界面定义了第二种方法,我不知道如何正确实现:
PopulateValues(ViewLocationExpanderContext context)
Run Code Online (Sandbox Code Playgroud)
我已经在互联网上阅读了关于这个界面的文章,但没有人真正提供过关于这个方法究竟是什么的更多信息,而不是说有关它如何帮助缓存的模糊事物.
如果有人可以解释框架如何使用这种方法以及如何适当地使用它来帮助缓存(如果它确实是它的用途),我真的很感激.
也许直接从GitHub MVC问题中获取的以下附加信息可以回答您的问题:
缓存
Values在其查找中包含字典.除非该PopulateValues()方法添加了不同的信息ViewLocationExpanderContext.Values,否则ExpandViewLocations()每个原始文件名只调用一次该方法,即从那时开始缓存初始信息.
最重要的是,OP提出的特定示例可以帮助更好地理解,至少这是发生在我身上的事情:
Foo和Bar)如果没有任何代码PopulateValues(),视图引擎会要求一次定位视图,然后使用视图"标准"的数据(例如ControllerName,ActionName,Area等),以高速缓存,其中视图中发现的实际位置.
因此,在OP情况下,一旦视图位置被缓存(例如,从Foo目录树中),每当需要具有相同名称的视图时,它将始终来自该树,将无法检测另一个Bar树中的那个是否存在.本来应该被拿起来.
OP的唯一方法是PopulateValues()通过向Values字典添加特定的,独特的视图细节来进行自定义:在当前场景中,这些是从当前操作上下文中提取的信息.
该附加信息使用双重:ExpandViewLocations()可能在调用时使用它们以确定正确的位置,而视图引擎将使用它们一旦找到就缓存视图位置.
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |