新聞中心
ASP.Net Core 為了便于獲取文件和文件夾信息,監(jiān)視文件變更, 在文件系統(tǒng)中提供了一個(gè)抽象層:File Providers, 這篇文章將會(huì)討論如何使用 File Providers 。

File Provider 抽象層
file prodivers 實(shí)現(xiàn)了 IFileProvider 接口,它的實(shí)現(xiàn)子類(lèi)大概有三塊: Physical,Embedded 和 Composite ,同時(shí)這個(gè)接口提供了可用于獲取文件和文件夾的相關(guān)信息的方法,接口定義如下:
public interface IFileProvider
{
IDirectoryContents GetDirectoryContents(string subpath);
IFileInfo GetFileInfo(string subpath);
IChangeToken Watch(string filter);
}
如果要實(shí)現(xiàn) 更改通知,還需要用 IChangeToken 接口,代碼如下:
public interface IChangeToken
{
bool ActiveChangeCallbacks { get; }
bool HasChanged { get; }
IDisposable RegisterChangeCallback(Action
下面是 IFileProvider 接口的三個(gè)具體實(shí)現(xiàn)及應(yīng)用,羅列如下:
PhysicalFileProvider
用于對(duì) 物理文件 的訪問(wèn)
EmbeddedFileProvider
用于對(duì) 程序集 內(nèi)的文件訪問(wèn)
CompositeFileProvider
實(shí)現(xiàn)前面兩者的混合訪問(wè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 使用依賴(lài)注入獲取實(shí)例了,如下代碼所示:
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() 來(lái)獲取當(dāng)前項(xiàng)目文件夾下的所有文件,如下代碼所示:
public IActionResult Index()
{
List lst = 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
顧名思義,它就是用來(lái)訪問(wèn)注入到 程序集 中的文件,下面的代碼展示了如何將 EmbeddedFileProvider 注入到 ASP.Net Core 的容器中,如下代碼所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
IFileProvider embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly())
;
services.AddSingleton(embeddedProvider);
}
使用 CompositeFileProvider
看到 Composite 單詞,是不是想起了設(shè)計(jì)模式中的 組合模式,對(duì)的,這里 CompositeFileProvider 也是類(lèi)似的操作手法,它可以將一個(gè)或者多個(gè)的 EmbeddedFileProvider 和 PhysicalFileProvider 進(jìn)行組合,進(jìn)而合成一個(gè) CompositeFileProvider 供上層進(jìn)行訪問(wèn),如果有點(diǎn)懵的話(huà),可參考如下代碼:
var physicalProvider = _env.ContentRootFileProvider;
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
總的來(lái)說(shuō),你可以利用 File Providers 來(lái)獲取文件或文件夾的信息,同時(shí)也可以實(shí)現(xiàn)變更通知,如果想在 ASP.Net Core 中實(shí)現(xiàn)文件系統(tǒng)訪問(wèn),可以通過(guò)依賴(lài)注入的方式按需使用你的 File Provider。
文章題目:.NetCore使用FileProviders
URL鏈接:http://www.5511xx.com/article/cceoedp.html


咨詢(xún)
建站咨詢(xún)
