新聞中心
本文轉載自微信公眾號「碼農讀書」,作者碼農讀書。轉載本文請聯(lián)系碼農讀書公眾號。

ASP.Net Core 為了便于獲取文件和文件夾信息,監(jiān)視文件變更, 在文件系統(tǒng)中提供了一個抽象層:File Providers, 這篇文章將會討論如何使用 File Providers 。
File Provider 抽象層
file prodivers 實現(xiàn)了 IFileProvider 接口,它的實現(xiàn)子類大概有三塊: Physical,Embedded 和 Composite ,同時這個接口提供了可用于獲取文件和文件夾的相關信息的方法,接口定義如下:
- public interface IFileProvider
- {
- IDirectoryContents GetDirectoryContents(string subpath);
- IFileInfo GetFileInfo(string subpath);
- IChangeToken Watch(string filter);
- }
如果要實現(xiàn) 更改通知,還需要用 IChangeToken 接口,代碼如下:
- public interface IChangeToken
- {
- bool ActiveChangeCallbacks { get; }
- bool HasChanged { get; }
- IDisposable RegisterChangeCallback(Action
- }
下面是 IFileProvider 接口的三個具體實現(xiàn)及應用,羅列如下:
- PhysicalFileProvider
用于對 物理文件 的訪問
- EmbeddedFileProvider
用于對 程序集 內的文件訪問
- CompositeFileProvider
實現(xiàn)前面兩者的混合訪問
使用 PhysicalFileProvider
要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先將其注入到 ServiceCollection 容器中,如下代碼所示:
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllersWithViews();
- IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
- services.AddSingleton
(physicalProvider); - }
注入到容器后,現(xiàn)在就可以在 Controller 使用依賴注入獲取實例了,如下代碼所示:
- public class HomeController : Controller
- {
- private readonly ILogger
_logger; - private readonly IFileProvider _fileProvider;
- public HomeController(ILogger
logger, IFileProvider fileProvider) - {
- _logger = logger;
- this._fileProvider = fileProvider;
- }
- }
下面在 Index 方法中使用 GetDirectoryContents() 來獲取當前項目文件夾下的所有文件,如下代碼所示:
- public IActionResult Index()
- {
- List
lst = new List (); - var contents = _fileProvider.GetDirectoryContents("");
- foreach (IFileInfo fileInfo in contents)
- {
- lst.Add(fileInfo.Name);
- }
- return View();
- }
使用 EmbeddedFileProvider
顧名思義,它就是用來訪問注入到 程序集 中的文件,下面的代碼展示了如何將 EmbeddedFileProvider 注入到 ASP.Net Core 的容器中,如下代碼所示:
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllersWithViews();
- IFileProvider embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly())
- ;
- services.AddSingleton
(embeddedProvider); - }
使用 CompositeFileProvider
看到 Composite 單詞,是不是想起了設計模式中的 組合模式,對的,這里 CompositeFileProvider 也是類似的操作手法,它可以將一個或者多個的 EmbeddedFileProvider 和 PhysicalFileProvider 進行組合,進而合成一個 CompositeFileProvider 供上層進行訪問,如果有點懵的話,可參考如下代碼:
- var physicalProvider = _env.ContentRootFileProvider;
- var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
- var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
總的來說,你可以利用 File Providers 來獲取文件或文件夾的信息,同時也可以實現(xiàn)變更通知,如果想在 ASP.Net Core 中實現(xiàn)文件系統(tǒng)訪問,可以通過依賴注入的方式按需使用你的 File Provider。
譯文鏈接:https://www.infoworld.com/article/3307516/how-to-use-file-providers-in-aspnet-core.html
分享名稱:如何在ASP.NetCore中使用FileProviders
網(wǎng)頁路徑:http://www.dlmjj.cn/article/dpedodh.html


咨詢
建站咨詢
