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 => new ConfigureOptions<RazorViewEngineOptions>(options =>
{ {
options.FileProviders.Add( options.FileProviders.Add(
new AspNetCoreVirtualFileProvider( new RazorViewEngineVirtualFileProvider(
context.Services.GetSingletonInstance<IObjectAccessor<IServiceProvider>>() 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 Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.VirtualFileSystem; using Microsoft.Extensions.FileProviders;
using Volo.Abp.VirtualFileSystem;
namespace Microsoft.AspNetCore.Builder 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 class VirtualFileSystemApplicationBuilderExtensions
{ {
public static void UseVirtualFiles(this IApplicationBuilder app) public static void UseVirtualFiles(this IApplicationBuilder app)
{ {
//var options = app.ApplicationServices.GetRequiredService<IOptions<VirtualFileSystemOptions>>().Value; IFileProvider fileProvider = new FileProviderSubFolderWrapper(
app.ApplicationServices.GetRequiredService<IVirtualFileProvider>(),
IFileProvider fileProvider = new AspNetCoreVirtualFileProvider( "/wwwroot"
app.ApplicationServices,
"/wwwroot" //TODO: Hard-coded "/wwwroot" is not good!
); );
app.UseStaticFiles( 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 namespace Volo.Abp.AspNetCore.VirtualFileSystem
{ {
public class AspNetCoreVirtualFileProvider : IFileProvider public class RazorViewEngineVirtualFileProvider : IFileProvider
{ {
private readonly Lazy<IFileProvider> _fileProvider; private readonly Lazy<IFileProvider> _fileProvider;
private readonly IObjectAccessor<IServiceProvider> _serviceProviderAccessor; private readonly IObjectAccessor<IServiceProvider> _serviceProviderAccessor;
private readonly string _contentPath;
public AspNetCoreVirtualFileProvider(IServiceProvider serviceProvider, string contentPath = null) public RazorViewEngineVirtualFileProvider(IObjectAccessor<IServiceProvider> serviceProviderAccessor)
: this(new ObjectAccessor<IServiceProvider>(serviceProvider))
{
_contentPath = contentPath;
}
public AspNetCoreVirtualFileProvider(IObjectAccessor<IServiceProvider> serviceProviderAccessor)
{ {
_serviceProviderAccessor = serviceProviderAccessor; _serviceProviderAccessor = serviceProviderAccessor;
_fileProvider = new Lazy<IFileProvider>( _fileProvider = new Lazy<IFileProvider>(
@ -30,11 +23,6 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem
public IFileInfo GetFileInfo(string subpath) public IFileInfo GetFileInfo(string subpath)
{ {
if (_contentPath != null)
{
subpath = _contentPath + subpath;
}
if (!IsInitialized()) if (!IsInitialized())
{ {
return new NotFoundFileInfo(subpath); return new NotFoundFileInfo(subpath);
@ -45,11 +33,6 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem
public IDirectoryContents GetDirectoryContents(string subpath) public IDirectoryContents GetDirectoryContents(string subpath)
{ {
if (_contentPath != null)
{
subpath = _contentPath + subpath;
}
if (!IsInitialized()) if (!IsInitialized())
{ {
return new NotFoundDirectoryContents(); 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