From 1660372ec570f4fe378dbea567138de999f4bde2 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 18 Jul 2018 20:35:08 +0300 Subject: [PATCH] AspNet Core virtual file provider refactored. --- .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 2 +- ...lFileSystemApplicationBuilderExtensions.cs | 15 +++---- ... => RazorViewEngineVirtualFileProvider.cs} | 21 +--------- .../FileProviderSubFolderWrapper.cs | 39 +++++++++++++++++++ 4 files changed, 48 insertions(+), 29 deletions(-) rename framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/{AspNetCoreVirtualFileProvider.cs => RazorViewEngineVirtualFileProvider.cs} (69%) create mode 100644 framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/FileProviderSubFolderWrapper.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index a5e3f0b0bf..dad0076a53 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -47,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc new ConfigureOptions(options => { options.FileProviders.Add( - new AspNetCoreVirtualFileProvider( + new RazorViewEngineVirtualFileProvider( context.Services.GetSingletonInstance>() ) ); diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs index c26519bb20..652b83918a 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs @@ -1,19 +1,16 @@ -using Microsoft.Extensions.FileProviders; -using Volo.Abp.AspNetCore.VirtualFileSystem; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Volo.Abp.VirtualFileSystem; namespace Microsoft.AspNetCore.Builder { - //TODO: Volo.Abp.AspNetCore.EmbeddedFiles package should be referenced by the projects using embedded resources..? - public static class VirtualFileSystemApplicationBuilderExtensions { public static void UseVirtualFiles(this IApplicationBuilder app) { - //var options = app.ApplicationServices.GetRequiredService>().Value; - - IFileProvider fileProvider = new AspNetCoreVirtualFileProvider( - app.ApplicationServices, - "/wwwroot" //TODO: Hard-coded "/wwwroot" is not good! + IFileProvider fileProvider = new FileProviderSubFolderWrapper( + app.ApplicationServices.GetRequiredService(), + "/wwwroot" ); app.UseStaticFiles( diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/RazorViewEngineVirtualFileProvider.cs similarity index 69% rename from framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs rename to framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/RazorViewEngineVirtualFileProvider.cs index 16c3a96749..166152e51a 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/RazorViewEngineVirtualFileProvider.cs @@ -7,19 +7,12 @@ using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.AspNetCore.VirtualFileSystem { - public class AspNetCoreVirtualFileProvider : IFileProvider + public class RazorViewEngineVirtualFileProvider : IFileProvider { private readonly Lazy _fileProvider; private readonly IObjectAccessor _serviceProviderAccessor; - private readonly string _contentPath; - public AspNetCoreVirtualFileProvider(IServiceProvider serviceProvider, string contentPath = null) - : this(new ObjectAccessor(serviceProvider)) - { - _contentPath = contentPath; - } - - public AspNetCoreVirtualFileProvider(IObjectAccessor serviceProviderAccessor) + public RazorViewEngineVirtualFileProvider(IObjectAccessor serviceProviderAccessor) { _serviceProviderAccessor = serviceProviderAccessor; _fileProvider = new Lazy( @@ -30,11 +23,6 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem public IFileInfo GetFileInfo(string subpath) { - if (_contentPath != null) - { - subpath = _contentPath + subpath; - } - if (!IsInitialized()) { return new NotFoundFileInfo(subpath); @@ -45,11 +33,6 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem public IDirectoryContents GetDirectoryContents(string subpath) { - if (_contentPath != null) - { - subpath = _contentPath + subpath; - } - if (!IsInitialized()) { return new NotFoundDirectoryContents(); diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/FileProviderSubFolderWrapper.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/FileProviderSubFolderWrapper.cs new file mode 100644 index 0000000000..188a0d5b60 --- /dev/null +++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/FileProviderSubFolderWrapper.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; + +namespace Volo.Abp.VirtualFileSystem +{ + public class FileProviderSubFolderWrapper : IFileProvider + { + private readonly IFileProvider _fileProvider; + private readonly string _contentPath; + + public FileProviderSubFolderWrapper(IFileProvider fileProvider, string contentPath = null) + { + _contentPath = contentPath; + _fileProvider = fileProvider; + } + + public IFileInfo GetFileInfo(string subpath) + { + return _fileProvider.GetFileInfo(NormalizePath(subpath)); + } + + public IDirectoryContents GetDirectoryContents(string subpath) + { + return _fileProvider.GetDirectoryContents(NormalizePath(subpath)); + } + + private string NormalizePath(string subpath) + { + return _contentPath == null + ? subpath + : _contentPath + subpath; + } + + public IChangeToken Watch(string filter) + { + return _fileProvider.Watch(filter); //TODO: Why this does not use NormalizePath? + } + } +} \ No newline at end of file