本文转载请联系码农阅读公众号。ASP.NetCore为了获取文件和文件夹信息,监控文件变化,在文件系统中提供了一个抽象层:FileProviders。本文将讨论如何使用文件提供程序。FileProvider抽象层文件提供者实现了IFileProvider接口,它有三个子类:Physical、Embedded和Composite。同时,该接口提供了获取文件和文件夹信息的方法。接口定义如下:publicinterfaceIFileProvider{IDirectoryContentsGetDirectoryContents(stringsubpath);IFileInfoGetFileInfo(stringsubpath);IChangeTokenWatch(stringfilter);}如果要实现变化通知,还需要用到IChangeToken接口,代码如下:publicinterfaceIChangeToken{boolActiveChangeCallbacks{get;}boolHasChanged{obb;}IDisposableRegister(physicalProvider);}注入容器后,现在可以使用依赖注入获取Controller中的实例,如下代码所示:,IFileProviderfileProvider){_logger=logger;this._fileProvider=fileProvider;}}接下来在Index方法中使用GetDirectoryContents()获取当前项目文件夹下的所有文件,如下代码所示:publicIActionResultIndex(){Listlst=newList();varcontents=_fileProvider.GetDirectoryContents("");foreach(IFileInfofileInfoincontents){lst.Add(fileInfo.Name);}returnView();}使用EmbeddedFileProvider,顾名思义,它用于访问注入到程序集中的文件,下面的代码展示了如何将EmbeddedFileProvider注入到ASP.NetCore容器中,如下代码所示:publicvoidConfigureSer恶习(IServiceCollectionservices){services.AddControllersWithViews();IFileProviderembeddedProvider=newEmbeddedFileProvider(Assembly.GetEntryAssembly());services.AddSingleton(embeddedProvider);}使用CompositeFileProvider看到Composite这个词,是不是会想到设计模式中的组合模式呢?是的,这里的CompositeFileProvider也是类似的操作方法。它可以将一个或多个EmbeddedFileProvider和PhysicalFileProvider组合起来,然后合成一个CompositeFileProvider供上层访问如果你有点迷糊,可以参考下面的代码:));varcompositeProvider=newCompositeFileProvider(physicalProvider,embeddedProvider);一般情况下,可以使用FileProviders来获取文件或文件夹信息,也可以实现变更通知。如果你想在ASP.NetCore中实现文件系统访问,你可以通过依赖注入使用你的FileProvider按需翻译链接:https://www.infoworld。com/article/3307516/how-to-use-file-providers-in-aspnet-core.html