Browse Source

AspNet Core virtual file provider refactored.

pull/395/head
Halil ibrahim Kalkan 8 years ago
parent
commit
1660372ec5
  1. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
  2. 15
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs
  3. 21
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/RazorViewEngineVirtualFileProvider.cs
  4. 39
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/FileProviderSubFolderWrapper.cs

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs

@ -47,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc
new ConfigureOptions<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(
new AspNetCoreVirtualFileProvider(
new RazorViewEngineVirtualFileProvider(
context.Services.GetSingletonInstance<IObjectAccessor<IServiceProvider>>()
)
);

15
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<IOptions<VirtualFileSystemOptions>>().Value;
IFileProvider fileProvider = new AspNetCoreVirtualFileProvider(
app.ApplicationServices,
"/wwwroot" //TODO: Hard-coded "/wwwroot" is not good!
IFileProvider fileProvider = new FileProviderSubFolderWrapper(
app.ApplicationServices.GetRequiredService<IVirtualFileProvider>(),
"/wwwroot"
);
app.UseStaticFiles(

21
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs → 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<IFileProvider> _fileProvider;
private readonly IObjectAccessor<IServiceProvider> _serviceProviderAccessor;
private readonly string _contentPath;
public AspNetCoreVirtualFileProvider(IServiceProvider serviceProvider, string contentPath = null)
: this(new ObjectAccessor<IServiceProvider>(serviceProvider))
{
_contentPath = contentPath;
}
public AspNetCoreVirtualFileProvider(IObjectAccessor<IServiceProvider> serviceProviderAccessor)
public RazorViewEngineVirtualFileProvider(IObjectAccessor<IServiceProvider> serviceProviderAccessor)
{
_serviceProviderAccessor = serviceProviderAccessor;
_fileProvider = new Lazy<IFileProvider>(
@ -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();

39
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?
}
}
}
Loading…
Cancel
Save