From 99de9b367f4b0df146072266b02de9e222f8072f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 22 Nov 2017 16:50:05 +0300 Subject: [PATCH] Replace virtual file system by physical file system on development. --- .../Blogging/AbpDeskMongoBlogModule.cs | 8 +--- .../AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs | 16 +++++++ src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll | Bin 15360 -> 14848 bytes .../AbpAccountWebModule.cs | 11 +---- ...lFileSystemApplicationBuilderExtensions.cs | 31 ++++++++++-- .../Volo.Abp.AspNetCore.EmbeddedFiles.csproj | 2 + .../AbpAspNetCoreMvcUiBootstrapModule.cs | 9 +--- .../AbpAspNetCoreMvcUiModule.cs | 9 +--- .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 4 +- .../AspNetCoreVirtualViewFileProvider.cs | 14 ------ .../Volo.Abp.AspNetCore.csproj | 2 + .../AspNetCoreVirtualFileOptions.cs | 18 ------- .../AspNetCoreVirtualFileProvider.cs | 41 +++++++++------- .../AbpIdentityWebModule.cs | 8 +--- .../Volo.Abp.VirtualFileSystem.csproj | 2 +- .../Embedded/EmbeddedFileSet.cs | 8 +++- .../VirtualFileSystem/IVirtualFileProvider.cs | 1 + .../VirtualFileSystem/VirtualFileSetList.cs | 14 ++++++ .../VirtualFileSetListExtensions.cs | 44 ++++++++++++++++++ .../VirtualFileSystemOptions.cs | 8 ++-- .../EmbeddedFileManager_Tests.cs | 9 +--- 21 files changed, 149 insertions(+), 110 deletions(-) delete mode 100644 src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/VirtualFileSystem/AspNetCoreVirtualViewFileProvider.cs delete mode 100644 src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileOptions.cs create mode 100644 src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs create mode 100644 src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs diff --git a/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs b/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs index a6ef043fa5..5154184d51 100644 --- a/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs +++ b/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs @@ -9,7 +9,6 @@ using Volo.Abp.Modularity; using Volo.Abp.MongoDB; using Volo.Abp.Uow; using Volo.Abp.VirtualFileSystem; -using Volo.Abp.VirtualFileSystem.Embedded; namespace AbpDesk.Blogging { @@ -26,12 +25,7 @@ namespace AbpDesk.Blogging services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "" //TODO: This is not tested yet! - ) - ); + options.FileSets.AddEmbedded(); //TODO: Test empty base namespace! }); services.AddAssemblyOf(); diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs index 2c1800f94d..1a219bf861 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs +++ b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using AbpDesk.EntityFrameworkCore; using AbpDesk.Web.Mvc.Navigation; using Microsoft.AspNetCore.Builder; @@ -21,6 +22,7 @@ using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Identity.Web; using Volo.Abp.Modularity; using Volo.Abp.Ui.Navigation; +using Volo.Abp.VirtualFileSystem; namespace AbpDesk.Web.Mvc { @@ -73,6 +75,20 @@ namespace AbpDesk.Web.Mvc { options.ConventionalControllers.Create(typeof(AbpDeskApplicationModule).Assembly); }); + + var env = services.GetSingletonInstance(); //TODO: Find a better way! + + + if (env.IsDevelopment()) + { + services.Configure(options => + { + options.FileSets.ReplaceEmbeddedByPyhsical(Path.Combine(env.ContentRootPath, "..\\..\\Volo.Abp.AspNetCore.Mvc.UI")); + options.FileSets.ReplaceEmbeddedByPyhsical(Path.Combine(env.ContentRootPath, "..\\..\\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap")); + options.FileSets.ReplaceEmbeddedByPyhsical(Path.Combine(env.ContentRootPath, "..\\..\\Volo.Abp.Account.Web")); + options.FileSets.ReplaceEmbeddedByPyhsical(Path.Combine(env.ContentRootPath, "..\\..\\Volo.Abp.Identity.Web")); + }); + } } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll b/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll index c867134e443e43907db34ca4e2921e9f98c9d2c4..5570b82feab8e693ba25a0f4d5fea810359f51f7 100644 GIT binary patch delta 4070 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 diff --git a/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs b/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs index 304699a4e0..5f5b59d58c 100644 --- a/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs +++ b/src/Volo.Abp.Account.Web/AbpAccountWebModule.cs @@ -1,10 +1,8 @@ -using System.Reflection; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.Identity; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; -using Volo.Abp.VirtualFileSystem.Embedded; namespace Volo.Abp.Account.Web { @@ -19,12 +17,7 @@ namespace Volo.Abp.Account.Web services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "Volo.Abp.Account.Web" - ) - ); + options.FileSets.AddEmbedded("Volo.Abp.Account.Web"); }); } } diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs index b5b2bc603e..c0a3881cee 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs +++ b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/VirtualFileSystemApplicationBuilderExtensions.cs @@ -1,4 +1,9 @@ -using Volo.Abp.AspNetCore.VirtualFileSystem; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.VirtualFileSystem; +using Volo.Abp.VirtualFileSystem; namespace Microsoft.AspNetCore.Builder { @@ -6,13 +11,29 @@ namespace Microsoft.AspNetCore.Builder { public static void UseVirtualFiles(this IApplicationBuilder app) { + var options = app.ApplicationServices.GetRequiredService>().Value; + + IFileProvider fileProvider = new AspNetCoreVirtualFileProvider( + app.ApplicationServices, + "/wwwroot" + ); + + if (options.FileSets.PhysicalPaths.Any()) + { + var fileProviders = options.FileSets.PhysicalPaths + .Select(p => new PhysicalFileProvider(p)) + .Cast() + .ToList(); + + fileProviders.Add(fileProvider); + + fileProvider = new CompositeFileProvider(fileProviders); + } + app.UseStaticFiles( new StaticFileOptions { - FileProvider = new AspNetCoreVirtualFileProvider( - app.ApplicationServices, - "/wwwroot" - ) + FileProvider = fileProvider } ); } diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo.Abp.AspNetCore.EmbeddedFiles.csproj b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo.Abp.AspNetCore.EmbeddedFiles.csproj index b678cdafba..b2721a3491 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo.Abp.AspNetCore.EmbeddedFiles.csproj +++ b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo.Abp.AspNetCore.EmbeddedFiles.csproj @@ -19,6 +19,8 @@ + + diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs index 6f19cb75ef..e88ba05457 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/AbpAspNetCoreMvcUiBootstrapModule.cs @@ -1,10 +1,8 @@ using System; -using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Bundling; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; -using Volo.Abp.VirtualFileSystem.Embedded; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap { @@ -17,12 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "Volo.Abp.AspNetCore.Mvc.UI.Bootstrap" - ) - ); + options.FileSets.AddEmbedded("Volo.Abp.AspNetCore.Mvc.UI.Bootstrap"); }); services.Configure(options => diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs index b1ee0bb864..c7d22cabde 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs @@ -1,10 +1,8 @@ using System; -using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Bundling; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; -using Volo.Abp.VirtualFileSystem.Embedded; namespace Volo.Abp.AspNetCore.Mvc { @@ -17,12 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "Volo.Abp.AspNetCore.Mvc" - ) - ); + options.FileSets.AddEmbedded("Volo.Abp.AspNetCore.Mvc"); }); services.Configure(options => diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index db0b9123a9..3dcd956bf6 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -17,7 +17,7 @@ using Microsoft.AspNetCore.Mvc.ViewComponents; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.AspNetCore.Mvc.DependencyInjection; -using Volo.Abp.AspNetCore.Mvc.VirtualFileSystem; +using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.Http; using Volo.Abp.Http.Modeling; @@ -40,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc new ConfigureOptions(options => { options.FileProviders.Add( - new AspNetCoreVirtualViewFileProvider( + new AspNetCoreVirtualFileProvider( services.GetSingletonInstance>() ) ); diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/VirtualFileSystem/AspNetCoreVirtualViewFileProvider.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/VirtualFileSystem/AspNetCoreVirtualViewFileProvider.cs deleted file mode 100644 index 218d9a510a..0000000000 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/VirtualFileSystem/AspNetCoreVirtualViewFileProvider.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Volo.Abp.AspNetCore.VirtualFileSystem; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.AspNetCore.Mvc.VirtualFileSystem -{ - public class AspNetCoreVirtualViewFileProvider : AspNetCoreVirtualFileProvider - { - public AspNetCoreVirtualViewFileProvider(IObjectAccessor serviceProviderAccessor) - : base(serviceProviderAccessor) - { - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index ecd09c41c1..db3baa62af 100644 --- a/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -18,6 +18,8 @@ + + diff --git a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileOptions.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileOptions.cs deleted file mode 100644 index 57395163eb..0000000000 --- a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileOptions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Abp.AspNetCore.VirtualFileSystem -{ - internal class AspNetCoreVirtualFileOptions //TODO: and use this! - { - public HashSet IgnoredFileExtensions { get; } - - public AspNetCoreVirtualFileOptions() - { - IgnoredFileExtensions = new HashSet - { - ".cshtml", - ".config" - }; - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs index a00fb58f69..d135771623 100644 --- a/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs +++ b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/AspNetCoreVirtualFileProvider.cs @@ -1,5 +1,5 @@ using System; -using System.IO; +using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; @@ -11,8 +11,7 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem { public class AspNetCoreVirtualFileProvider : IFileProvider { - private readonly Lazy _virtualFileProvider; - private readonly Lazy _options; + private readonly Lazy _fileProvider; private readonly IObjectAccessor _serviceProviderAccessor; private readonly string _contentPath; @@ -26,13 +25,27 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem { _serviceProviderAccessor = serviceProviderAccessor; - _virtualFileProvider = new Lazy( - () => serviceProviderAccessor.Value.GetRequiredService(), - true - ); + _fileProvider = new Lazy( + () => + { + var options = serviceProviderAccessor.Value.GetRequiredService>().Value; + + IFileProvider fileProvider = serviceProviderAccessor.Value.GetRequiredService(); + + if (options.FileSets.PhysicalPaths.Any()) + { + var fileProviders = options.FileSets.PhysicalPaths + .Select(p => new PhysicalFileProvider(p)) + .Cast() + .ToList(); - _options = new Lazy( - () => serviceProviderAccessor.Value.GetRequiredService>().Value, + fileProviders.Add(fileProvider); + + fileProvider = new CompositeFileProvider(fileProviders); + } + + return fileProvider; + }, true ); } @@ -44,14 +57,12 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem subpath = _contentPath + subpath; } - //TODO: Ignore files in _options.Value.IgnoredFileExtensions - if (!IsInitialized()) { return new NotFoundFileInfo(subpath); } - return _virtualFileProvider.Value.GetFileInfo(subpath); + return _fileProvider.Value.GetFileInfo(subpath); } public IDirectoryContents GetDirectoryContents(string subpath) @@ -61,14 +72,12 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem subpath = _contentPath + subpath; } - //TODO: Ignore files in _options.Value.IgnoredFileExtensions - if (!IsInitialized()) { return new NotFoundDirectoryContents(); } - return _virtualFileProvider.Value.GetDirectoryContents(subpath); + return _fileProvider.Value.GetDirectoryContents(subpath); } public IChangeToken Watch(string filter) @@ -78,7 +87,7 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem return NullChangeToken.Singleton; } - return _virtualFileProvider.Value.Watch(filter); + return _fileProvider.Value.Watch(filter); } private bool IsInitialized() diff --git a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs index 100abda25b..7397e36533 100644 --- a/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs +++ b/src/Volo.Abp.Identity.Web/AbpIdentityWebModule.cs @@ -6,7 +6,6 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.Ui.Navigation; using Volo.Abp.VirtualFileSystem; -using Volo.Abp.VirtualFileSystem.Embedded; namespace Volo.Abp.Identity.Web { @@ -25,12 +24,7 @@ namespace Volo.Abp.Identity.Web services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "Volo.Abp.Identity.Web" - ) - ); + options.FileSets.AddEmbedded("Volo.Abp.Identity.Web"); }); services.Configure(options => diff --git a/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj index 8c77bb369e..0833d1b3dd 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj +++ b/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs index 859c8821fd..c9bd9f179e 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs @@ -16,12 +16,16 @@ namespace Volo.Abp.VirtualFileSystem.Embedded [CanBeNull] public string BaseNamespace { get; } - public EmbeddedFileSet([NotNull] Assembly assembly, string baseNamespace) + [CanBeNull] + public string BaseFolderInProject { get; } + + public EmbeddedFileSet([NotNull] Assembly assembly, [CanBeNull] string baseNamespace, [CanBeNull] string baseFolderInProject = null) { Check.NotNull(assembly, nameof(assembly)); Assembly = assembly; BaseNamespace = baseNamespace; + BaseFolderInProject = baseFolderInProject; } public void AddFiles(Dictionary files) @@ -52,7 +56,7 @@ namespace Volo.Abp.VirtualFileSystem.Embedded } } - private void AddDirectoriesRecursively(Dictionary files, string directoryPath, DateTimeOffset lastModificationTime) + private static void AddDirectoriesRecursively(Dictionary files, string directoryPath, DateTimeOffset lastModificationTime) { if (files.ContainsKey(directoryPath)) { diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileProvider.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileProvider.cs index a8f52bbf10..4bffc5685f 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileProvider.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileProvider.cs @@ -4,5 +4,6 @@ namespace Volo.Abp.VirtualFileSystem { public interface IVirtualFileProvider : IFileProvider { + } } \ No newline at end of file diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs new file mode 100644 index 0000000000..2ddd0ff3a4 --- /dev/null +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Volo.Abp.VirtualFileSystem +{ + public class VirtualFileSetList : List + { + public List PhysicalPaths { get; } + + public VirtualFileSetList() + { + PhysicalPaths = new List(); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs new file mode 100644 index 0000000000..1e29398fb3 --- /dev/null +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.Linq; +using JetBrains.Annotations; +using Volo.Abp.VirtualFileSystem.Embedded; + +namespace Volo.Abp.VirtualFileSystem +{ + public static class VirtualFileSetListExtensions + { + public static void AddEmbedded([NotNull] this VirtualFileSetList list, [CanBeNull] string baseNamespace = null) + { + Check.NotNull(list, nameof(list)); + + list.Add( + new EmbeddedFileSet( + typeof(T).Assembly, + baseNamespace + ) + ); + } + + public static void ReplaceEmbeddedByPyhsical([NotNull] this VirtualFileSetList list, [NotNull] string pyhsicalPath) + { + Check.NotNull(list, nameof(list)); + Check.NotNull(pyhsicalPath, nameof(pyhsicalPath)); + + var assembly = typeof(T).Assembly; + var embeddedFileSets = list.OfType().Where(fs => fs.Assembly == assembly).ToList(); + + foreach (var embeddedFileSet in embeddedFileSets) + { + list.Remove(embeddedFileSet); + + if (!embeddedFileSet.BaseFolderInProject.IsNullOrEmpty()) + { + pyhsicalPath = Path.Combine(pyhsicalPath, embeddedFileSet.BaseFolderInProject); + } + + list.PhysicalPaths.Add(pyhsicalPath); + } + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSystemOptions.cs b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSystemOptions.cs index 087f10af53..205d1a57c8 100644 --- a/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSystemOptions.cs +++ b/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSystemOptions.cs @@ -1,14 +1,12 @@ -using System.Collections.Generic; - -namespace Volo.Abp.VirtualFileSystem +namespace Volo.Abp.VirtualFileSystem { public class VirtualFileSystemOptions { - public List FileSets { get; } + public VirtualFileSetList FileSets { get; } public VirtualFileSystemOptions() { - FileSets = new List(); + FileSets = new VirtualFileSetList(); } } } \ No newline at end of file diff --git a/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/EmbeddedFileManager_Tests.cs b/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/EmbeddedFileManager_Tests.cs index abda04da2e..a57d9493c3 100644 --- a/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/EmbeddedFileManager_Tests.cs +++ b/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/EmbeddedFileManager_Tests.cs @@ -1,11 +1,9 @@ using System.IO; -using System.Reflection; using System.Text; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Modularity; using Volo.Abp.TestBase; -using Volo.Abp.VirtualFileSystem.Embedded; using Xunit; namespace Volo.Abp.VirtualFileSystem @@ -42,12 +40,7 @@ namespace Volo.Abp.VirtualFileSystem { services.Configure(options => { - options.FileSets.Add( - new EmbeddedFileSet( - GetType().Assembly, - "Volo.Abp.VirtualFileSystem.MyResources" - ) - ); + options.FileSets.AddEmbedded("Volo.Abp.VirtualFileSystem.MyResources"); }); } }