From 9d2154ce74f364a79e4827b1eeb5b0c76756068f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 22 Feb 2017 14:14:34 +0300 Subject: [PATCH] Added a demo embedded view and refactored. --- .../AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs | 5 ++- src/AbpDesk/AbpDesk.Web.Mvc/project.json | 4 ++- ...beddedFilesApplicationBuilderExtensions.cs | 10 ++---- .../AbpAspNetCoreEmbeddedFilesModule.cs | 1 + .../AbpAspNetCoreMvcUiModule.cs | 33 +++++++++++++++++++ .../Controllers/AbpEmbeddedDemoController.cs | 12 +++++++ .../EmbeddedDemoMainMenuContributor.cs | 23 +++++++++++++ .../Views/AbpEmbeddedDemo/Index.cshtml | 3 ++ .../Components/Menu/MenuViewComponent.cs | 26 +++++++-------- src/Volo.Abp.AspNetCore.Mvc.UI/project.json | 8 +++++ .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 26 +++++++++++++-- .../AspNetCoreEmbeddedFileOptions.cs | 0 .../EmbeddedResourceFileProvider.cs | 11 +++++-- .../EmbeddedResourceItemFileInfo.cs | 0 .../EmbeddedResourceViewFileProvider.cs | 3 +- src/Volo.Abp/Volo/Abp/AbpKernelModule.cs | 11 ++++++- 16 files changed, 147 insertions(+), 29 deletions(-) create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI/Controllers/AbpEmbeddedDemoController.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI/EmbeddedDemoMainMenuContributor.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI/Views/AbpEmbeddedDemo/Index.cshtml rename src/{Volo.Abp.AspNetCore.EmbeddedFiles => Volo.Abp.AspNetCore}/Volo/Abp/AspNetCore/EmbeddedFiles/AspNetCoreEmbeddedFileOptions.cs (100%) rename src/{Volo.Abp.AspNetCore.EmbeddedFiles => Volo.Abp.AspNetCore}/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs (79%) rename src/{Volo.Abp.AspNetCore.EmbeddedFiles => Volo.Abp.AspNetCore}/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceItemFileInfo.cs (100%) rename src/{Volo.Abp.AspNetCore.EmbeddedFiles => Volo.Abp.AspNetCore}/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs (74%) diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs index addd8cdc92..e585e91932 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs +++ b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Volo.Abp; +using Volo.Abp.AspNetCore.EmbeddedFiles; using Volo.Abp.AspNetCore.Modularity; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Modularity; @@ -14,7 +15,8 @@ using Volo.Abp.UI.Navigation; namespace AbpDesk.Web.Mvc { [DependsOn( - typeof(AbpAspNetCoreMvcModule), + typeof(AbpAspNetCoreEmbeddedFilesModule), + typeof(AbpAspNetCoreMvcUiModule), typeof(AbpDeskApplicationModule), typeof(AbpDeskEntityFrameworkCoreModule))] public class AbpDeskWebMvcModule : AbpModule @@ -47,6 +49,7 @@ namespace AbpDesk.Web.Mvc } app.UseStaticFiles(); + app.UseEmbeddedFiles(); app.UseMvc(routes => { diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/project.json b/src/AbpDesk/AbpDesk.Web.Mvc/project.json index e8a11f242b..412f4494cb 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/project.json +++ b/src/AbpDesk/AbpDesk.Web.Mvc/project.json @@ -22,7 +22,9 @@ }, "Volo.Abp.AspNetCore.Mvc": "1.0.0-*", "AbpDesk.EntityFrameworkCore": "1.0.0-*", - "AbpDesk.Application": "1.0.0-*" + "AbpDesk.Application": "1.0.0-*", + "Volo.Abp.AspNetCore.Mvc.UI": "1.0.0-*", + "Volo.Abp.AspNetCore.EmbeddedFiles": "1.0.0-*" }, "tools": { diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/EmbeddedFilesApplicationBuilderExtensions.cs b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/EmbeddedFilesApplicationBuilderExtensions.cs index 250c4856c0..b13e0b3c5a 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/EmbeddedFilesApplicationBuilderExtensions.cs +++ b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Microsoft/AspNetCore/Builder/EmbeddedFilesApplicationBuilderExtensions.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; -using Volo.Abp.AspNetCore.EmbeddedFiles; +using Volo.Abp.AspNetCore.EmbeddedFiles; -namespace Volo.Abp.AspNetCore.Microsoft.AspNetCore.Builder +namespace Microsoft.AspNetCore.Builder { public static class EmbeddedFilesApplicationBuilderExtensions { @@ -21,6 +16,5 @@ namespace Volo.Abp.AspNetCore.Microsoft.AspNetCore.Builder } ); } - } } diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AbpAspNetCoreEmbeddedFilesModule.cs b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AbpAspNetCoreEmbeddedFilesModule.cs index ede705720d..64d1319511 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AbpAspNetCoreEmbeddedFilesModule.cs +++ b/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AbpAspNetCoreEmbeddedFilesModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Modularity; namespace Volo.Abp.AspNetCore.EmbeddedFiles { + //TODO: Consider to remove this module and merge to Volo.Abp.AspNetCore. The only problem is this module depends on static files (can we remove dependency with a custom middleware?) [DependsOn(typeof(AbpAspNetCoreModule))] public class AbpAspNetCoreEmbeddedFilesModule : AbpModule { diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs new file mode 100644 index 0000000000..3dc9995a47 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EmbeddedFiles; +using Volo.Abp.Modularity; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Mvc +{ + [DependsOn(typeof(AbpAspNetCoreMvcModule))] + public class AbpAspNetCoreMvcUiModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + + services.Configure(options => + { + options.MenuContributors.Add(new EmbeddedDemoMainMenuContributor()); + }); + + services.Configure(options => + { + options.Sources.Add( + new EmbeddedFileSet( + "/Views/", + GetType().GetTypeInfo().Assembly, + "Volo.Abp.AspNetCore.Mvc.UI.Views" + ) + ); + }); + } + } +} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Controllers/AbpEmbeddedDemoController.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Controllers/AbpEmbeddedDemoController.cs new file mode 100644 index 0000000000..5be7ac962b --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Controllers/AbpEmbeddedDemoController.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; + +namespace Volo.Abp.AspNetCore.Mvc.Controllers +{ + public class AbpEmbeddedDemoController : AbpController + { + public ActionResult Index() + { + return View(); + } + } +} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/EmbeddedDemoMainMenuContributor.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/EmbeddedDemoMainMenuContributor.cs new file mode 100644 index 0000000000..1badcae029 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/EmbeddedDemoMainMenuContributor.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Mvc +{ + public class EmbeddedDemoMainMenuContributor : IMenuContributor + { + public Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name != StandardMenus.Main) + { + return Task.CompletedTask; + } + + context.Menu + .AddItem( + new ApplicationMenuItem("EmbeddedDemo", "EmbeddedDemo", url: "/AbpEmbeddedDemo") + ); + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/AbpEmbeddedDemo/Index.cshtml b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/AbpEmbeddedDemo/Index.cshtml new file mode 100644 index 0000000000..0aa28f9368 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/AbpEmbeddedDemo/Index.cshtml @@ -0,0 +1,3 @@ +

ABP Embedded Demo Page

+ +

This page's content is stored as an embedded file!

\ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/Menu/MenuViewComponent.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/Menu/MenuViewComponent.cs index f4b8c65245..79efafc5d9 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/Menu/MenuViewComponent.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/Menu/MenuViewComponent.cs @@ -4,19 +4,19 @@ using Volo.Abp.UI.Navigation; namespace Volo.Abp.AspNetCore.Mvc.Views.Shared.Components.Menu { - public class MenuViewComponent : ViewComponent - { - private readonly IMenuManager _menuManager; + //public class MenuViewComponent : ViewComponent + //{ + // private readonly IMenuManager _menuManager; - public MenuViewComponent(IMenuManager menuManager) - { - _menuManager = menuManager; - } + // public MenuViewComponent(IMenuManager menuManager) + // { + // _menuManager = menuManager; + // } - public async Task InvokeAsync(string menuName = StandardMenus.Main, string viewName = "Default") - { - var menu = await _menuManager.GetAsync(StandardMenus.Main); - return View(viewName, menu); - } - } + // public async Task InvokeAsync(string menuName = StandardMenus.Main, string viewName = "Default") + // { + // var menu = await _menuManager.GetAsync(StandardMenus.Main); + // return View(viewName, menu); + // } + //} } diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/project.json b/src/Volo.Abp.AspNetCore.Mvc.UI/project.json index 4203459285..4e95371fe5 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI/project.json +++ b/src/Volo.Abp.AspNetCore.Mvc.UI/project.json @@ -10,5 +10,13 @@ "netstandard1.6": { "imports": "dnxcore50" } + }, + + "buildOptions": { + "embed": { + "include": [ + "Views/AbpEmbeddedDemo/*.*" + ] + } } } 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 b4896353fc..d12ca2299e 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 @@ -1,14 +1,36 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.EmbeddedFiles; using Volo.Abp.Modularity; +using Volo.DependencyInjection; namespace Volo.Abp.AspNetCore.Mvc { - [DependsOn(typeof(AbpAspNetCoreModule))] + [DependsOn( + typeof(AbpAspNetCoreModule) + )] public class AbpAspNetCoreMvcModule : IAbpModule { public void ConfigureServices(IServiceCollection services) { services.AddAssemblyOf(); + + //Configure Razor + services.Insert(0, + ServiceDescriptor.Singleton>( + new ConfigureOptions(options => + { + options.FileProviders.Add( + new EmbeddedResourceViewFileProvider( + services.GetSingletonInstance>() + ) + ); + } + ) + ) + ); } } } diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AspNetCoreEmbeddedFileOptions.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/AspNetCoreEmbeddedFileOptions.cs similarity index 100% rename from src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/AspNetCoreEmbeddedFileOptions.cs rename to src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/AspNetCoreEmbeddedFileOptions.cs diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs similarity index 79% rename from src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs rename to src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs index 743fdae2f9..1d362ebc0e 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs +++ b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceFileProvider.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; using Volo.Abp.EmbeddedFiles; +using Volo.DependencyInjection; namespace Volo.Abp.AspNetCore.EmbeddedFiles { @@ -13,14 +14,20 @@ namespace Volo.Abp.AspNetCore.EmbeddedFiles private readonly Lazy _options; public EmbeddedResourceFileProvider(IServiceProvider serviceProvider) + : this(new ObjectAccessor(serviceProvider)) + { + + } + + public EmbeddedResourceFileProvider(IObjectAccessor serviceProvider) { _embeddedResourceManager = new Lazy( - () => serviceProvider.GetRequiredService(), + () => serviceProvider.Value.GetRequiredService(), true ); _options = new Lazy( - () => serviceProvider.GetRequiredService>().Value, + () => serviceProvider.Value.GetRequiredService>().Value, true ); } diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceItemFileInfo.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceItemFileInfo.cs similarity index 100% rename from src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceItemFileInfo.cs rename to src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceItemFileInfo.cs diff --git a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs similarity index 74% rename from src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs rename to src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs index d491a68012..f7cada9d17 100644 --- a/src/Volo.Abp.AspNetCore.EmbeddedFiles/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs +++ b/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/EmbeddedFiles/EmbeddedResourceViewFileProvider.cs @@ -1,11 +1,12 @@ using System; using Volo.Abp.EmbeddedFiles; +using Volo.DependencyInjection; namespace Volo.Abp.AspNetCore.EmbeddedFiles { public class EmbeddedResourceViewFileProvider : EmbeddedResourceFileProvider { - public EmbeddedResourceViewFileProvider(IServiceProvider serviceProvider) + public EmbeddedResourceViewFileProvider(IObjectAccessor serviceProvider) : base(serviceProvider) { } diff --git a/src/Volo.Abp/Volo/Abp/AbpKernelModule.cs b/src/Volo.Abp/Volo/Abp/AbpKernelModule.cs index e96d7172db..4568163806 100644 --- a/src/Volo.Abp/Volo/Abp/AbpKernelModule.cs +++ b/src/Volo.Abp/Volo/Abp/AbpKernelModule.cs @@ -1,5 +1,7 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; +using Volo.DependencyInjection; namespace Volo.Abp { @@ -11,6 +13,13 @@ namespace Volo.Abp services.AddLogging(); services.AddAssemblyOf(); + + services.TryAddObjectAccessor(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + context.ServiceProvider.GetRequiredService>().Value = context.ServiceProvider; } } }