ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。IFileProvider对象构建了一个抽象的文件系统,我们不仅可以利用它提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化。
一、树形层次结构IFileProvider对象为我们构建了一个具有层次化目录结构的文件系统。由于IFileProvider是一个接口,所以由它构建的是一个抽象化的文件系统,这里所谓的目录和文件都是一个抽象的概念。具体的文件可能对应一个物理文件,也可能保存在数据库中,或者来源于网络,甚至有可能根本就不存在,其内容需要在读取时动态生成。目录也仅仅是组织文件的逻辑容器。为了让读者朋友们对这个文件系统有一个大体认识,我们先来演示几个简单的实例。
文件系统管理的所有文件以目录的形式进行组织,一个IFileProvider对象可以视为针对一个根目录的映射。目录除了可以存放文件之外,还可以包含子目录,所以目录/文件在整体上呈现出树形化层次化结构。接下来我们将一个IFileProvider对象映射到一个物理目录,并利用它将所在目录的结构呈现出来。
我们演示实例是一个普通的控制台程序。我们在演示实例中定义了如下一个IFileManager接口,它利用一个唯一的ShowStructure方法将文件系统的整体结构显示出来。该方法具有一个类型为Action<int, string>的参数负责将文件系统的节点(目录或者文件)名称呈现出来。这个Action<int, string>对象的两个参数分别代表缩进的层级和目录/文件的名称。
public interface IFileManager { void ShowStructure(Action<int, string> render); }