net core 中视图查找器(IFileProvider)介绍

2021-03-12  乐帮网

mvc netcore

ASP.NET Core通过使用“视图查找器”来搜索视图,模板,组件等文件内容。在ASP.NET Core 3.0框架中共有默认的三种视图查找器,它们都实现了接口约束:IFileProvider ,我们先看一看它都有哪些方法,方便理解它。

(1)按路径返回文件内容,文件内容就是许多键值对
IDirectoryContents GetDirectoryContents(string subpath);

(2)按路径返回文件信息实体IFileInfo,IFileInfo中规定了信息休包含的数据。
IFileInfo GetFileInfo(string subpath);

(3)按照过滤配置返回文件监视器,包含唯一标识值等值。
IChangeToken Watch(string filter);

默认net core中提供了三个 IFileProvider 的实现,PhysicalFileProvider,ManifestEmbeddedFileProvider,CompositeFileProvider我们分别看一看他们的使用场景。

1、PhysicalFileProvider
PhysicalFileProvider是最原始的传统的搜索物理文件实现。PhysicalFileProvider的逻辑和我们之前使用的framwork mvc是一样的,就是搜索硬盘上视图文件的实现。它的使用示例代码如下:

var provider = new PhysicalFileProvider(applicationRoot);
var contents = provider.GetDirectoryContents(string.Empty);
var filePath = Path.Combine("wwwroot", "js", "site.js");
var fileInfo = provider.GetFileInfo(filePath);

2、ManifestEmbeddedFileProvider
用于搜索嵌入在程序集中的文件,例如我们生成的预编译的View.dll文件。这个是我们项目默认的使用的方式。它的使用示例如下:

var manifestEmbeddedProvider = 
    new ManifestEmbeddedFileProvider(typeof(Program).Assembly);

3、CompositeFileProvider
CompositeFileProvider是一个复合类型的IFileProvider集合,它可以接收一系列IFileProvider集合,但要注意它的顺序。一个简单的示例代码如下:

var physicalProvider = _env.ContentRootFileProvider;
var manifestEmbeddedProvider = 
    new ManifestEmbeddedFileProvider(typeof(Program).Assembly);
var compositeProvider = 
    new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider);
services.AddSingleton<IFileProvider>(compositeProvider);

以上就是本次的总结,参考文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/file-providers?view=aspnetcore-3.1
最近在做net core的热插拔,研究View的热插拔,所以对以上内容做个简单的学习。

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力