.Net Core使用File Providers

大雄45發表於2021-02-21
導讀 ASP.Net Core 為了便於獲取檔案和資料夾資訊,監視檔案變更, 在檔案系統中提供了一個抽象層:File Providers, 這篇文章將會討論如何使用 File Providers 。
File Provider 抽象層

file prodivers 實現了 IFileProvider 介面,它的實現子類大概有三塊: Physical,Embedded 和 Composite ,同時這個介面提供了可用於獲取檔案和資料夾的相關資訊的方法,介面定義如下:

public interface IFileProvider 
    { 
        IDirectoryContents GetDirectoryContents(string subpath); 
 
        IFileInfo GetFileInfo(string subpath); 
 
        IChangeToken Watch(string filter); 
    }

如果要實現 更改通知,還需要用 IChangeToken 介面,程式碼如下:

public interface IChangeToken 
   { 
       bool ActiveChangeCallbacks { get; } 
 
       bool HasChanged { get; } 
 
       IDisposable RegisterChangeCallback(Action callback, object state); 
   }

下面是 IFileProvider 介面的三個具體實現及應用,羅列如下:

  1. PhysicalFileProvider

用於對 物理檔案 的訪問

  1. EmbeddedFileProvider

用於對 程式集 內的檔案訪問

  1. CompositeFileProvider

實現前面兩者的混合訪問

使用 PhysicalFileProvider

要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先將其注入到 ServiceCollection 容器中,如下程式碼所示:

public void ConfigureServices(IServiceCollection services) 
        { 
            services.AddControllersWithViews(); 
 
            IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); 
 
            services.AddSingleton(physicalProvider); 
        }

注入到容器後,現在就可以在 Controller 使用依賴注入獲取例項了,如下程式碼所示:

public class HomeController : Controller 
   { 
       private readonly ILogger_logger; 
       private readonly IFileProvider _fileProvider; 
 
       public HomeController(ILoggerlogger, IFileProvider fileProvider) 
       { 
           _logger = logger; 
           this._fileProvider = fileProvider; 
       } 
   }

下面在 Index 方法中使用 GetDirectoryContents() 來獲取當前專案資料夾下的所有檔案,如下程式碼所示:

public IActionResult Index() 
       { 
           Listlst = new List(); 
           var contents = _fileProvider.GetDirectoryContents(""); 
 
           foreach (IFileInfo fileInfo in contents) 
           { 
               lst.Add(fileInfo.Name); 
           } 
 
           return View(); 
       }

.Net Core使用File Providers.Net Core使用File Providers

使用 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 來獲取檔案或資料夾的資訊,同時也可以實現變更通知,如果想在 ASP.Net Core 中實現檔案系統訪問,可以透過依賴注入的方式按需使用你的 File Provider。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2758069/,如需轉載,請註明出處,否則將追究法律責任。

相關文章