From 765d836c75d1122dda906e551866f13694f4f3c2 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 18 Apr 2021 13:59:34 +0800 Subject: [PATCH 1/4] Supports the use of multiple template rendering engines in one application. Resolve #8651 --- .../AbpTemplateRendererProviderOptions.cs | 33 ++++++++++++ .../ITemplateRendererProvider.cs | 27 ++++++++++ .../Abp/TextTemplating/TemplateDefinition.cs | 14 ++++- .../TemplateRendererProviderBase.cs | 42 +++++++++++++++ .../Razor/AbpTextTemplatingRazorModule.cs | 8 ++- ...er.cs => RazorTemplateRendererProvider.cs} | 40 ++++++-------- .../Scriban/AbpTextTemplatingScribanModule.cs | 8 ++- ....cs => ScribanTemplateRendererProvider.cs} | 34 ++++-------- .../Volo.Abp.TextTemplating.csproj | 1 + .../TextTemplating/AbpTemplateRenderer.cs | 53 +++++++++++++++++++ .../AbpTextTemplatingModule.cs | 5 +- ...Volo.Abp.TextTemplating.Razor.Tests.csproj | 1 - ...lizedTemplateContentReaderFactory_Tests.cs | 4 +- ...=> RazorTemplateRendererProvider_Tests.cs} | 4 +- .../RazorTestTemplateDefinitionProvider.cs | 12 +++-- .../Razor/RazorTextTemplatingTestModule.cs | 1 - ...zorVirtualFileTemplateContributor_Tests.cs | 6 +-- .../ForgotPasswordEmail.cshtml | 2 +- .../SampleTemplates/ShowDecimalNumber.cshtml | 2 +- .../SampleTemplates/WelcomeEmail/en.cshtml | 2 +- .../SampleTemplates/WelcomeEmail/tr.cshtml | 2 +- ...lo.Abp.TextTemplating.Scriban.Tests.csproj | 3 +- ... ScribanTemplateRendererProvider_Tests.cs} | 4 +- .../ScribanTestTemplateDefinitionProvider.cs | 12 +++-- .../ScribanTextTemplatingTestModule.cs | 1 - .../Volo.Abp.TextTemplating.Tests.csproj | 10 +++- .../AbpTextTemplatingTestModule.cs | 16 +++++- .../HybridTemplateRendererProvider_Tests.cs | 46 ++++++++++++++++ .../SampleTemplates/TestRazorTemplate.cshtml | 2 + .../SampleTemplates/TestScribanTemplate.tpl | 1 + .../TestTemplateDefinitionProvider.cs | 22 ++++++++ .../Volo/Abp/TextTemplating/TestTemplates.cs | 5 +- 32 files changed, 339 insertions(+), 84 deletions(-) create mode 100644 framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs create mode 100644 framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs create mode 100644 framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs rename framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/{RazorTemplateRenderer.cs => RazorTemplateRendererProvider.cs} (77%) rename framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/{ScribanTemplateRenderer.cs => ScribanTemplateRendererProvider.cs} (77%) create mode 100644 framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs rename framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/{ => TextTemplating}/AbpTextTemplatingModule.cs (51%) rename framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/{RazorTemplateRenderer_Tests.cs => RazorTemplateRendererProvider_Tests.cs} (96%) rename framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/{ScribanTemplateRenderer_Tests.cs => ScribanTemplateRendererProvider_Tests.cs} (96%) create mode 100644 framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/HybridTemplateRendererProvider_Tests.cs create mode 100644 framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestRazorTemplate.cshtml create mode 100644 framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs new file mode 100644 index 0000000000..1b7754585f --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.TextTemplating +{ + public class AbpTemplateRendererProviderOptions + { + protected IDictionary Providers { get; } + + public AbpTemplateRendererProviderOptions() + { + Providers = new Dictionary(); + } + + public AbpTemplateRendererProviderOptions AddProvider(string templateRenderEngineName) + where TProvider : ITemplateRendererProvider + { + if (Providers.ContainsKey(templateRenderEngineName)) + { + Providers.RemoveAll(x => x.Key == templateRenderEngineName); + } + + Providers[templateRenderEngineName] = typeof(TProvider); + + return this; + } + + public Type GetProviderTypeOrNull(string templateRenderEngineName) + { + return templateRenderEngineName == null ? null : Providers.GetOrDefault(templateRenderEngineName); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs new file mode 100644 index 0000000000..f2167f2781 --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.TextTemplating +{ + public interface ITemplateRendererProvider + { + string Name { get; } + + /// + /// Renders a text template. + /// + /// The template name + /// An optional model object that is used in the template + /// Culture name. Uses the if not specified + /// A dictionary which can be used to import global objects to the template + /// + Task RenderAsync( + [NotNull] string templateName, + [CanBeNull] object model = null, + [CanBeNull] string cultureName = null, + [CanBeNull] Dictionary globalContext = null + ); + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs index 948c1712db..cda06eccd7 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs +++ b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs @@ -37,6 +37,9 @@ namespace Volo.Abp.TextTemplating [CanBeNull] public string DefaultCultureName { get; } + [CanBeNull] + public string RenderEngine { get; protected set; } + /// /// Gets/sets a key-value on the . /// @@ -84,5 +87,14 @@ namespace Volo.Abp.TextTemplating Properties[key] = value; return this; } + + /// + /// Sets the Render Engine of . + /// + public virtual TemplateDefinition WithRenderEngine(string renderEngine) + { + RenderEngine = renderEngine; + return this; + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs new file mode 100644 index 0000000000..5a44ee752e --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.TextTemplating +{ + public abstract class TemplateRendererProviderBase : ITemplateRendererProvider + { + public abstract string Name { get; } + + protected readonly ITemplateDefinitionManager TemplateDefinitionManager; + protected readonly ITemplateContentProvider TemplateContentProvider; + protected readonly IStringLocalizerFactory StringLocalizerFactory; + + public TemplateRendererProviderBase( + ITemplateDefinitionManager templateDefinitionManager, + ITemplateContentProvider templateContentProvider, + IStringLocalizerFactory stringLocalizerFactory) + { + TemplateDefinitionManager = templateDefinitionManager; + TemplateContentProvider = templateContentProvider; + StringLocalizerFactory = stringLocalizerFactory; + } + + public abstract Task RenderAsync(string templateName, object model = null, string cultureName = null, Dictionary globalContext = null); + + protected virtual async Task GetContentOrNullAsync(TemplateDefinition templateDefinition) + { + return await TemplateContentProvider.GetContentOrNullAsync(templateDefinition); + } + + protected virtual IStringLocalizer GetLocalizerOrNull(TemplateDefinition templateDefinition) + { + if (templateDefinition.LocalizationResource != null) + { + return StringLocalizerFactory.Create(templateDefinition.LocalizationResource); + } + + return StringLocalizerFactory.CreateDefaultOrNull(); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs index 318a356b93..c53f43ac6f 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs @@ -7,6 +7,12 @@ namespace Volo.Abp.TextTemplating.Razor )] public class AbpTextTemplatingRazorModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.AddProvider(RazorTemplateRendererProvider.ProviderName); + }); + } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs similarity index 77% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs index db06e67d4a..0559ace16e 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs @@ -12,27 +12,27 @@ using Volo.Abp.Localization; namespace Volo.Abp.TextTemplating.Razor { - [Dependency(ReplaceServices = true)] - public class RazorTemplateRenderer : ITemplateRenderer, ITransientDependency + public class RazorTemplateRendererProvider : TemplateRendererProviderBase, ITransientDependency { - private readonly IServiceScopeFactory _serviceScopeFactory; - private readonly IAbpCompiledViewProvider _abpCompiledViewProvider; - private readonly ITemplateDefinitionManager _templateDefinitionManager; - private readonly IStringLocalizerFactory _stringLocalizerFactory; + public const string ProviderName = "Razor"; + public override string Name => ProviderName; - public RazorTemplateRenderer( + protected readonly IServiceScopeFactory ServiceScopeFactory; + protected readonly IAbpCompiledViewProvider AbpCompiledViewProvider; + + public RazorTemplateRendererProvider( IServiceScopeFactory serviceScopeFactory, IAbpCompiledViewProvider abpCompiledViewProvider, ITemplateDefinitionManager templateDefinitionManager, + ITemplateContentProvider templateContentProvider, IStringLocalizerFactory stringLocalizerFactory) + : base(templateDefinitionManager, templateContentProvider, stringLocalizerFactory) { - _serviceScopeFactory = serviceScopeFactory; - _templateDefinitionManager = templateDefinitionManager; - _stringLocalizerFactory = stringLocalizerFactory; - _abpCompiledViewProvider = abpCompiledViewProvider; + ServiceScopeFactory = serviceScopeFactory; + AbpCompiledViewProvider = abpCompiledViewProvider; } - public virtual async Task RenderAsync( + public override async Task RenderAsync( [NotNull] string templateName, [CanBeNull] object model = null, [CanBeNull] string cultureName = null, @@ -74,7 +74,7 @@ namespace Volo.Abp.TextTemplating.Razor Dictionary globalContext, object model = null) { - var templateDefinition = _templateDefinitionManager.Get(templateName); + var templateDefinition = TemplateDefinitionManager.Get(templateName); var renderedContent = await RenderSingleTemplateAsync( templateDefinition, @@ -115,11 +115,11 @@ namespace Volo.Abp.TextTemplating.Razor Dictionary globalContext, object model = null) { - var assembly = await _abpCompiledViewProvider.GetAssemblyAsync(templateDefinition); + var assembly = await AbpCompiledViewProvider.GetAssemblyAsync(templateDefinition); var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName); var template = (IRazorTemplatePage) Activator.CreateInstance(templateType); - using (var scope = _serviceScopeFactory.CreateScope()) + using (var scope = ServiceScopeFactory.CreateScope()) { var modelType = templateType .GetInterfaces() @@ -154,15 +154,5 @@ namespace Volo.Abp.TextTemplating.Razor razorTemplatePageWithModel.Model = (TModel)model; } } - - private IStringLocalizer GetLocalizerOrNull(TemplateDefinition templateDefinition) - { - if (templateDefinition.LocalizationResource != null) - { - return _stringLocalizerFactory.Create(templateDefinition.LocalizationResource); - } - - return _stringLocalizerFactory.CreateDefaultOrNull(); - } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs index 789b9e376f..2659f6b574 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs @@ -7,6 +7,12 @@ namespace Volo.Abp.TextTemplating.Scriban )] public class AbpTextTemplatingScribanModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.AddProvider(ScribanTemplateRendererProvider.ProviderName); + }); + } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs similarity index 77% rename from framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer.cs rename to framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs index 3fdd667a82..cecec2ab56 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs @@ -9,23 +9,20 @@ using Volo.Abp.Localization; namespace Volo.Abp.TextTemplating.Scriban { - public class ScribanTemplateRenderer : ITemplateRenderer, ITransientDependency + public class ScribanTemplateRendererProvider : TemplateRendererProviderBase, ITransientDependency { - private readonly ITemplateContentProvider _templateContentProvider; - private readonly ITemplateDefinitionManager _templateDefinitionManager; - private readonly IStringLocalizerFactory _stringLocalizerFactory; + public const string ProviderName = "Scriban"; + public override string Name => ProviderName; - public ScribanTemplateRenderer( - ITemplateContentProvider templateContentProvider, + public ScribanTemplateRendererProvider( ITemplateDefinitionManager templateDefinitionManager, + ITemplateContentProvider templateContentProvider, IStringLocalizerFactory stringLocalizerFactory) + : base(templateDefinitionManager, templateContentProvider, stringLocalizerFactory) { - _templateContentProvider = templateContentProvider; - _templateDefinitionManager = templateDefinitionManager; - _stringLocalizerFactory = stringLocalizerFactory; } - public virtual async Task RenderAsync( + public override async Task RenderAsync( [NotNull] string templateName, [CanBeNull] object model = null, [CanBeNull] string cultureName = null, @@ -64,7 +61,7 @@ namespace Volo.Abp.TextTemplating.Scriban Dictionary globalContext, object model = null) { - var templateDefinition = _templateDefinitionManager.Get(templateName); + var templateDefinition = TemplateDefinitionManager.Get(templateName); var renderedContent = await RenderSingleTemplateAsync( templateDefinition, @@ -89,10 +86,7 @@ namespace Volo.Abp.TextTemplating.Scriban Dictionary globalContext, object model = null) { - var rawTemplateContent = await _templateContentProvider - .GetContentOrNullAsync( - templateDefinition - ); + var rawTemplateContent = await GetContentOrNullAsync(templateDefinition); return await RenderTemplateContentWithScribanAsync( templateDefinition, @@ -146,15 +140,5 @@ namespace Volo.Abp.TextTemplating.Scriban return context; } - - private IStringLocalizer GetLocalizerOrNull(TemplateDefinition templateDefinition) - { - if (templateDefinition.LocalizationResource != null) - { - return _stringLocalizerFactory.Create(templateDefinition.LocalizationResource); - } - - return _stringLocalizerFactory.CreateDefaultOrNull(); - } } } diff --git a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj index 3af0ba984d..c48648b491 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj +++ b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj @@ -10,6 +10,7 @@ + diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs new file mode 100644 index 0000000000..e59fd25d9e --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.TextTemplating.Scriban; + +namespace Volo.Abp.TextTemplating +{ + public class AbpTemplateRenderer : ITemplateRenderer, ITransientDependency + { + protected IServiceProvider ServiceProvider { get; } + protected ITemplateDefinitionManager TemplateDefinitionManager { get; } + protected AbpTemplateRendererProviderOptions Options { get; } + + public AbpTemplateRenderer( + IServiceProvider serviceProvider, + ITemplateDefinitionManager templateDefinitionManager, + IOptions options) + { + ServiceProvider = serviceProvider; + TemplateDefinitionManager = templateDefinitionManager; + Options = options.Value; + } + + public virtual async Task RenderAsync( + string templateName, + object model = null, + string cultureName = null, + Dictionary globalContext = null) + { + var templateDefinition = TemplateDefinitionManager.Get(templateName); + + var renderEngine = templateDefinition.RenderEngine; + + if (renderEngine.IsNullOrWhiteSpace()) + { + renderEngine = ScribanTemplateRendererProvider.ProviderName; + } + + var providerType = Options.GetProviderTypeOrNull(renderEngine); + + if (providerType != null) + { + var templateRendererProvider = (ITemplateRendererProvider)ServiceProvider.GetRequiredService(providerType); + return await templateRendererProvider.RenderAsync(templateName, model, cultureName, globalContext); + } + + throw new AbpException("There is no render engine found with template name: " + templateName); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs similarity index 51% rename from framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs rename to framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs index d5817d0d33..01296925a1 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs @@ -1,10 +1,13 @@ using Volo.Abp.Modularity; +using Volo.Abp.TextTemplating.Razor; using Volo.Abp.TextTemplating.Scriban; namespace Volo.Abp.TextTemplating { [DependsOn( - typeof(AbpTextTemplatingScribanModule) + typeof(AbpTextTemplatingAbstractionsModule), + typeof(AbpTextTemplatingScribanModule), + typeof(AbpTextTemplatingRazorModule) )] public class AbpTextTemplatingModule : AbpModule { diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj index ca26b60a4b..7161e0520a 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj @@ -15,7 +15,6 @@ - diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs index 53eaf0fc80..28ecb6db52 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs @@ -14,11 +14,11 @@ namespace Volo.Abp.TextTemplating.Razor new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Volo", "Abp", "TextTemplating", "Razor")))); - WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + + WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + "Welcome @Model.Name to the abp.io!"; - WelcomeEmailTurkishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + + WelcomeEmailTurkishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + "Merhaba @Model.Name, abp.io'ya hoşgeldiniz!"; } diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider_Tests.cs similarity index 96% rename from framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer_Tests.cs rename to framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider_Tests.cs index 07da572c1e..04e2d1b029 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider_Tests.cs @@ -4,11 +4,11 @@ using Xunit; namespace Volo.Abp.TextTemplating.Razor { - public class RazorTemplateRenderer_Tests : AbpTextTemplatingTestBase + public class RazorTemplateRendererProvider_Tests : AbpTextTemplatingTestBase { private readonly ITemplateRenderer _templateRenderer; - public RazorTemplateRenderer_Tests() + public RazorTemplateRendererProvider_Tests() { _templateRenderer = GetRequiredService(); } diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs index 3bb1d7f831..0719a96a24 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs @@ -7,16 +7,20 @@ namespace Volo.Abp.TextTemplating.Razor public override void Define(ITemplateDefinitionContext context) { context.GetOrNull(TestTemplates.WelcomeEmail)? - .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false); + .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.ForgotPasswordEmail)? - .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.cshtml", true); + .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.cshtml", true) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.TestTemplateLayout1)? - .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.cshtml", true); + .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.cshtml", true) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.ShowDecimalNumber)? - .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.cshtml", true); + .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.cshtml", true) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); context.Add(new TemplateDefinition(RazorTestTemplates.TestTemplate).WithVirtualFilePath("/SampleTemplates/TestTemplate.cshtml", true)); } diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTextTemplatingTestModule.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTextTemplatingTestModule.cs index df2f8b3b3d..74d7add887 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTextTemplatingTestModule.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTextTemplatingTestModule.cs @@ -5,7 +5,6 @@ using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.TextTemplating.Razor { [DependsOn( - typeof(AbpTextTemplatingRazorModule), typeof(AbpTextTemplatingTestModule) )] public class RazorTextTemplatingTestModule : AbpModule diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorVirtualFileTemplateContributor_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorVirtualFileTemplateContributor_Tests.cs index 5634ccfa2c..5bbb267613 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorVirtualFileTemplateContributor_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorVirtualFileTemplateContributor_Tests.cs @@ -7,15 +7,15 @@ namespace Volo.Abp.TextTemplating.Razor { public RazorVirtualFileTemplateContributor_Tests() { - WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + + WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + "Welcome @Model.Name to the abp.io!"; - WelcomeEmailTurkishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + + WelcomeEmailTurkishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + "Merhaba @Model.Name, abp.io'ya hoşgeldiniz!"; - ForgotPasswordEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + + ForgotPasswordEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + "@Localizer[\"HelloText\", Model.Name], @Localizer[\"HowAreYou\"]. Please click to the following link to get an email to reset your password!"; } diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ForgotPasswordEmail.cshtml b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ForgotPasswordEmail.cshtml index e02bc728ab..360e5b2a7c 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ForgotPasswordEmail.cshtml +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ForgotPasswordEmail.cshtml @@ -1,2 +1,2 @@ -@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase +@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase @Localizer["HelloText", Model.Name], @Localizer["HowAreYou"]. Please click to the following link to get an email to reset your password! \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ShowDecimalNumber.cshtml b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ShowDecimalNumber.cshtml index d309dc5a2b..64a133f903 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ShowDecimalNumber.cshtml +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/ShowDecimalNumber.cshtml @@ -1,2 +1,2 @@ -@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase +@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase @Model.Amount \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/en.cshtml b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/en.cshtml index 410bfe1240..af025d39c3 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/en.cshtml +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/en.cshtml @@ -1,2 +1,2 @@ -@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase +@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase Welcome @Model.Name to the abp.io! \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/tr.cshtml b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/tr.cshtml index 7ea3c8802a..c17e07bee1 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/tr.cshtml +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/SampleTemplates/WelcomeEmail/tr.cshtml @@ -1,2 +1,2 @@ -@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase +@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase Merhaba @Model.Name, abp.io'ya hoşgeldiniz! \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj index d17a4d46fa..1cdcf89ab9 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj @@ -6,7 +6,7 @@ net5.0 - + Always @@ -15,7 +15,6 @@ - diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider_Tests.cs similarity index 96% rename from framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer_Tests.cs rename to framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider_Tests.cs index a076301919..cc0e45828b 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderer_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider_Tests.cs @@ -5,11 +5,11 @@ using Xunit; namespace Volo.Abp.TextTemplating.Scriban { - public class ScribanTemplateRenderer_Tests : AbpTextTemplatingTestBase + public class ScribanTemplateRendererProvider_Tests : AbpTextTemplatingTestBase { private readonly ITemplateRenderer _templateRenderer; - public ScribanTemplateRenderer_Tests() + public ScribanTemplateRendererProvider_Tests() { _templateRenderer = GetRequiredService(); } diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs index 956c376fd0..d929a00e00 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs @@ -5,16 +5,20 @@ public override void Define(ITemplateDefinitionContext context) { context.GetOrNull(TestTemplates.WelcomeEmail)? - .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false); + .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.ForgotPasswordEmail)? - .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.tpl", true); + .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.tpl", true) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.TestTemplateLayout1)? - .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.tpl", true); + .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.tpl", true) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); context.GetOrNull(TestTemplates.ShowDecimalNumber)? - .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.tpl", true); + .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.tpl", true) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); } } } diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTextTemplatingTestModule.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTextTemplatingTestModule.cs index 2ed2e51b56..ff9da00c36 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTextTemplatingTestModule.cs +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTextTemplatingTestModule.cs @@ -4,7 +4,6 @@ using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.TextTemplating.Scriban { [DependsOn( - typeof(AbpTextTemplatingScribanModule), typeof(AbpTextTemplatingTestModule) )] public class ScribanTextTemplatingTestModule : AbpModule diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj index 65983605be..814b5a6922 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj @@ -10,12 +10,20 @@ + + Always + + + + Always + + - + diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs index 74174ea690..3a32ad353b 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs @@ -1,13 +1,16 @@ -using Volo.Abp.Autofac; +using System.Collections.Generic; +using Microsoft.CodeAnalysis; +using Volo.Abp.Autofac; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.TextTemplating.Localization; +using Volo.Abp.TextTemplating.Razor; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.TextTemplating { [DependsOn( - typeof(AbpTextTemplatingAbstractionsModule), + typeof(AbpTextTemplatingModule), typeof(AbpTestBaseModule), typeof(AbpAutofacModule), typeof(AbpLocalizationModule) @@ -27,6 +30,15 @@ namespace Volo.Abp.TextTemplating .Add("en") .AddVirtualJson("/Localization"); }); + + Configure(options => + { + options.TemplateReferences.Add(TestTemplates.HybridTemplateRazor, + new List() + { + MetadataReference.CreateFromFile(typeof(AbpTextTemplatingTestModule).Assembly.Location) + }); + }); } } } diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/HybridTemplateRendererProvider_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/HybridTemplateRendererProvider_Tests.cs new file mode 100644 index 0000000000..f6fffc89a7 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/HybridTemplateRendererProvider_Tests.cs @@ -0,0 +1,46 @@ +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.Abp.TextTemplating +{ + public class HybridTemplateRendererProvider_Tests : AbpTextTemplatingTestBase + { + private readonly ITemplateRenderer _templateRenderer; + + public HybridTemplateRendererProvider_Tests() + { + _templateRenderer = GetRequiredService(); + } + + [Fact] + public async Task Should_Render_By_Scriban() + { + (await _templateRenderer.RenderAsync( + TestTemplates.HybridTemplateScriban, + model: new + { + name = "John" + } + )).ShouldBe("Hello John, how are you?"); + } + + [Fact] + public async Task Should_Render_By_Razor() + { + (await _templateRenderer.RenderAsync( + TestTemplates.HybridTemplateRazor, + model: new HybridModel + { + Name = "John" + } + )).ShouldBe("Hello John, how are you?"); + } + + public class HybridModel + { + public string Name { get; set; } + } + + } +} diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestRazorTemplate.cshtml b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestRazorTemplate.cshtml new file mode 100644 index 0000000000..02cf7a82a8 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestRazorTemplate.cshtml @@ -0,0 +1,2 @@ +@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase +Hello @Model.Name, @Localizer["HowAreYou"] \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl new file mode 100644 index 0000000000..d1b39f873c --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl @@ -0,0 +1 @@ +Hello {{model.name}}, {{L "HowAreYou" }} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs index 289bf1b04f..5c111b5fd5 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs @@ -1,4 +1,6 @@ using Volo.Abp.TextTemplating.Localization; +using Volo.Abp.TextTemplating.Razor; +using Volo.Abp.TextTemplating.Scriban; namespace Volo.Abp.TextTemplating { @@ -35,6 +37,26 @@ namespace Volo.Abp.TextTemplating layout: TestTemplates.TestTemplateLayout1 ) ); + + context.Add( + new TemplateDefinition( + TestTemplates.HybridTemplateScriban, + localizationResource: typeof(TestLocalizationSource), + layout: null + ) + .WithVirtualFilePath("/SampleTemplates/TestScribanTemplate.tpl", true) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + ); + + context.Add( + new TemplateDefinition( + TestTemplates.HybridTemplateRazor, + localizationResource: typeof(TestLocalizationSource), + layout: null + ) + .WithVirtualFilePath("/SampleTemplates/TestRazorTemplate.cshtml", true) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + ); } } } diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs index 29a8604f3b..25d8223b78 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplates.cs @@ -6,5 +6,8 @@ public const string ForgotPasswordEmail = "ForgotPasswordEmail"; public const string TestTemplateLayout1 = "TestTemplateLayout1"; public const string ShowDecimalNumber = "ShowDecimalNumber"; + + public const string HybridTemplateRazor = "HybridTemplateRazor"; + public const string HybridTemplateScriban = "HybridTemplateScriban"; } -} \ No newline at end of file +} From 46fec693f7e7b4703f2c71550c9560978a13ff09 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 19 Apr 2021 11:28:09 +0800 Subject: [PATCH 2/4] Update text templating document. --- docs/en/Text-Templating-Razor.md | 15 ++++++++++++--- docs/en/Text-Templating-Scriban.md | 15 ++++++++++++--- docs/en/Text-Templating.md | 2 ++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/en/Text-Templating-Razor.md b/docs/en/Text-Templating-Razor.md index 700d262b9b..14de2f3d2f 100644 --- a/docs/en/Text-Templating-Razor.md +++ b/docs/en/Text-Templating-Razor.md @@ -84,6 +84,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider { context.Add( new TemplateDefinition("Hello") //template name: "Hello" + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) .WithVirtualFilePath( "/Demos/Hello/Hello.cshtml", //template content path isInlineLocalized: true @@ -97,6 +98,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider * `TemplateDefinition` is the class represents a template. Each template must have a unique name (that will be used while you are rendering the template). * `/Demos/Hello/Hello.cshtml` is the path of the template file. * `isInlineLocalized` is used to declare if you are using a single template for all languages (`true`) or different templates for each language (`false`). See the Localization section below for more. +* `WithRenderEngine` method is used to set the render engine of the template. ### The Template Base @@ -223,7 +225,9 @@ context.Add( new TemplateDefinition( "PasswordReset", //Template name typeof(DemoResource) //LOCALIZATION RESOURCE - ).WithVirtualFilePath( + ) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/PasswordReset/PasswordReset.cshtml", //template content path isInlineLocalized: true ) @@ -271,6 +275,7 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en" ) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", //template content folder isInlineLocalized: false @@ -333,7 +338,9 @@ context.Add( new TemplateDefinition( "EmailLayout", isLayout: true //SET isLayout! - ).WithVirtualFilePath( + ) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/EmailLayout/EmailLayout.cshtml", isInlineLocalized: true ) @@ -348,7 +355,9 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en", layout: "EmailLayout" //Set the LAYOUT - ).WithVirtualFilePath( + ) + .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", isInlineLocalized: false ) diff --git a/docs/en/Text-Templating-Scriban.md b/docs/en/Text-Templating-Scriban.md index 4d9be31dc8..8990e55cc4 100644 --- a/docs/en/Text-Templating-Scriban.md +++ b/docs/en/Text-Templating-Scriban.md @@ -49,6 +49,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider "/Demos/Hello/Hello.tpl", //template content path isInlineLocalized: true ) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) ); } } @@ -58,6 +59,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider * `TemplateDefinition` is the class represents a template. Each template must have a unique name (that will be used while you are rendering the template). * `/Demos/Hello/Hello.tpl` is the path of the template file. * `isInlineLocalized` is used to declare if you are using a single template for all languages (`true`) or different templates for each language (`false`). See the Localization section below for more. +* `WithRenderEngine` method is used to set the render engine of the template. ### The Template Content @@ -175,7 +177,9 @@ context.Add( new TemplateDefinition( "PasswordReset", //Template name typeof(DemoResource) //LOCALIZATION RESOURCE - ).WithVirtualFilePath( + ) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/PasswordReset/PasswordReset.tpl", //template content path isInlineLocalized: true ) @@ -223,6 +227,7 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en" ) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", //template content folder isInlineLocalized: false @@ -284,7 +289,9 @@ context.Add( new TemplateDefinition( "EmailLayout", isLayout: true //SET isLayout! - ).WithVirtualFilePath( + ) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/EmailLayout/EmailLayout.tpl", isInlineLocalized: true ) @@ -299,7 +306,9 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en", layout: "EmailLayout" //Set the LAYOUT - ).WithVirtualFilePath( + ) + .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", isInlineLocalized: false ) diff --git a/docs/en/Text-Templating.md b/docs/en/Text-Templating.md index c9b03cd940..a2c55c7a54 100644 --- a/docs/en/Text-Templating.md +++ b/docs/en/Text-Templating.md @@ -24,6 +24,8 @@ ABP Framework provides two types of engines; * **[Razor](Text-Templating-Razor.md)** * **[Scriban](Text-Templating-Scriban.md)** +You can use different template engines at the same time, or even create a new template engine. + ## Source Code Get [the source code of the sample application](https://github.com/abpframework/abp-samples/tree/master/TextTemplateDemo) developed and referred through this document. From 1434ed767b9d1739d54892cfff2ac125f980c822 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Apr 2021 10:52:35 +0800 Subject: [PATCH 3/4] Update docs/en/Text-Templating.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Halil İbrahim Kalkan --- docs/en/Text-Templating.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Text-Templating.md b/docs/en/Text-Templating.md index a2c55c7a54..b5d082f627 100644 --- a/docs/en/Text-Templating.md +++ b/docs/en/Text-Templating.md @@ -24,7 +24,7 @@ ABP Framework provides two types of engines; * **[Razor](Text-Templating-Razor.md)** * **[Scriban](Text-Templating-Scriban.md)** -You can use different template engines at the same time, or even create a new template engine. +You can use different template engines in the same application, or even create a new custom template engine. ## Source Code From 90f53f4f32b48db16027f1eda6354f33c67ec9a6 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Apr 2021 14:27:43 +0800 Subject: [PATCH 4/4] Refactor. --- docs/en/Text-Templating-Razor.md | 10 +++--- docs/en/Text-Templating-Scriban.md | 10 +++--- framework/Volo.Abp.sln | 2 +- .../AbpTemplateRendererProviderOptions.cs | 33 ------------------- .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 0 .../Volo.Abp.TextTemplating.Core.csproj} | 0 .../TextTemplating/AbpTemplateRenderer.cs | 26 ++++++++------- .../AbpTextTemplatingCoreModule.cs} | 2 +- .../AbpTextTemplatingOptions.cs | 10 ++++-- .../ITemplateContentContributor.cs | 0 .../ITemplateContentProvider.cs | 0 .../ITemplateDefinitionContext.cs | 0 .../ITemplateDefinitionManager.cs | 0 .../ITemplateDefinitionProvider.cs | 0 .../Abp/TextTemplating/ITemplateRenderer.cs | 0 .../ITemplateRenderingEngine.cs} | 2 +- .../TemplateContentContributorContext.cs | 0 .../TextTemplating/TemplateContentProvider.cs | 0 .../Abp/TextTemplating/TemplateDefinition.cs | 2 +- .../TemplateDefinitionContext.cs | 0 .../TemplateDefinitionExtensions.cs | 0 .../TemplateDefinitionManager.cs | 0 .../TemplateDefinitionProvider.cs | 0 .../TemplateRenderingEngineBase.cs} | 4 +-- .../FileInfoLocalizedTemplateContentReader.cs | 0 .../ILocalizedTemplateContentReader.cs | 0 .../ILocalizedTemplateContentReaderFactory.cs | 0 .../LocalizedTemplateContentReaderFactory.cs | 0 .../NullLocalizedTemplateContentReader.cs | 0 .../VirtualFileTemplateContentContributor.cs | 0 ...ualFolderLocalizedTemplateContentReader.cs | 0 .../Volo.Abp.TextTemplating.Razor.csproj | 2 +- .../Razor/AbpTextTemplatingRazorModule.cs | 13 +++++--- .../RazorTemplateDefinitionExtensions.cs | 12 +++++++ ...der.cs => RazorTemplateRenderingEngine.cs} | 8 ++--- .../Volo.Abp.TextTemplating.Scriban.csproj | 2 +- .../Scriban/AbpTextTemplatingScribanModule.cs | 7 ++-- .../ScribanTemplateDefinitionExtensions.cs | 12 +++++++ ...r.cs => ScribanTemplateRenderingEngine.cs} | 8 ++--- .../Volo.Abp.TextTemplating.csproj | 1 - .../TextTemplating/AbpTextTemplatingModule.cs | 13 ++++++++ .../TextTemplating/AbpTextTemplatingModule.cs | 16 --------- .../RazorTestTemplateDefinitionProvider.cs | 8 ++--- .../ScribanTestTemplateDefinitionProvider.cs | 8 ++--- .../Volo.Abp.TextTemplating.Tests.csproj | 2 ++ .../AbpTextTemplatingTestModule.cs | 4 ++- .../TestTemplateDefinitionProvider.cs | 4 +-- nupkg/common.ps1 | 2 +- 49 files changed, 114 insertions(+), 109 deletions(-) delete mode 100644 framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/FodyWeavers.xml (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/FodyWeavers.xsd (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions/Volo.Abp.TextTemplating.Abstractions.csproj => Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj} (100%) rename framework/src/{Volo.Abp.TextTemplating/Volo/Abp/TextTemplating => Volo.Abp.TextTemplating.Core/Volo/Abp}/TextTemplating/AbpTemplateRenderer.cs (52%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingAbstractionsModule.cs => Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingCoreModule.cs} (95%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs (63%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateContentContributor.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateContentProvider.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateDefinitionProvider.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/ITemplateRenderer.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs => Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs} (95%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateContentProvider.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateDefinition.cs (98%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/TemplateDefinitionProvider.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs => Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs} (92%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReaderFactory.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs (100%) rename framework/src/{Volo.Abp.TextTemplating.Abstractions => Volo.Abp.TextTemplating.Core}/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs (100%) create mode 100644 framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateDefinitionExtensions.cs rename framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/{RazorTemplateRendererProvider.cs => RazorTemplateRenderingEngine.cs} (95%) create mode 100644 framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateDefinitionExtensions.cs rename framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/{ScribanTemplateRendererProvider.cs => ScribanTemplateRenderingEngine.cs} (94%) create mode 100644 framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs delete mode 100644 framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs diff --git a/docs/en/Text-Templating-Razor.md b/docs/en/Text-Templating-Razor.md index 14de2f3d2f..770de46ca6 100644 --- a/docs/en/Text-Templating-Razor.md +++ b/docs/en/Text-Templating-Razor.md @@ -84,7 +84,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider { context.Add( new TemplateDefinition("Hello") //template name: "Hello" - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() .WithVirtualFilePath( "/Demos/Hello/Hello.cshtml", //template content path isInlineLocalized: true @@ -226,7 +226,7 @@ context.Add( "PasswordReset", //Template name typeof(DemoResource) //LOCALIZATION RESOURCE ) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() .WithVirtualFilePath( "/Demos/PasswordReset/PasswordReset.cshtml", //template content path isInlineLocalized: true @@ -275,7 +275,7 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en" ) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", //template content folder isInlineLocalized: false @@ -339,7 +339,7 @@ context.Add( "EmailLayout", isLayout: true //SET isLayout! ) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() .WithVirtualFilePath( "/Demos/EmailLayout/EmailLayout.cshtml", isInlineLocalized: true @@ -356,7 +356,7 @@ context.Add( defaultCultureName: "en", layout: "EmailLayout" //Set the LAYOUT ) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", isInlineLocalized: false diff --git a/docs/en/Text-Templating-Scriban.md b/docs/en/Text-Templating-Scriban.md index 8990e55cc4..4263be011e 100644 --- a/docs/en/Text-Templating-Scriban.md +++ b/docs/en/Text-Templating-Scriban.md @@ -49,7 +49,7 @@ public class DemoTemplateDefinitionProvider : TemplateDefinitionProvider "/Demos/Hello/Hello.tpl", //template content path isInlineLocalized: true ) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() ); } } @@ -178,7 +178,7 @@ context.Add( "PasswordReset", //Template name typeof(DemoResource) //LOCALIZATION RESOURCE ) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() .WithVirtualFilePath( "/Demos/PasswordReset/PasswordReset.tpl", //template content path isInlineLocalized: true @@ -227,7 +227,7 @@ context.Add( name: "WelcomeEmail", defaultCultureName: "en" ) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", //template content folder isInlineLocalized: false @@ -290,7 +290,7 @@ context.Add( "EmailLayout", isLayout: true //SET isLayout! ) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() .WithVirtualFilePath( "/Demos/EmailLayout/EmailLayout.tpl", isInlineLocalized: true @@ -307,7 +307,7 @@ context.Add( defaultCultureName: "en", layout: "EmailLayout" //Set the LAYOUT ) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() .WithVirtualFilePath( "/Demos/WelcomeEmail/Templates", isInlineLocalized: false diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index d7d7cdd4d1..160918667d 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -385,7 +385,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Authorization.Abstractions", "src\Volo.Abp.Authorization.Abstractions\Volo.Abp.Authorization.Abstractions.csproj", "{87B0C2A8-FE95-4779-8B9C-2181AA52B3FA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TextTemplating.Abstractions", "src\Volo.Abp.TextTemplating.Abstractions\Volo.Abp.TextTemplating.Abstractions.csproj", "{184E859A-282D-44D7-B8E9-FEA874644013}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TextTemplating.Core", "src\Volo.Abp.TextTemplating.Core\Volo.Abp.TextTemplating.Core.csproj", "{184E859A-282D-44D7-B8E9-FEA874644013}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TextTemplating.Scriban", "src\Volo.Abp.TextTemplating.Scriban\Volo.Abp.TextTemplating.Scriban.csproj", "{228723E6-FA6D-406B-B8F8-C9BCC547AF8E}" EndProject diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs b/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs deleted file mode 100644 index 1b7754585f..0000000000 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTemplateRendererProviderOptions.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Volo.Abp.TextTemplating -{ - public class AbpTemplateRendererProviderOptions - { - protected IDictionary Providers { get; } - - public AbpTemplateRendererProviderOptions() - { - Providers = new Dictionary(); - } - - public AbpTemplateRendererProviderOptions AddProvider(string templateRenderEngineName) - where TProvider : ITemplateRendererProvider - { - if (Providers.ContainsKey(templateRenderEngineName)) - { - Providers.RemoveAll(x => x.Key == templateRenderEngineName); - } - - Providers[templateRenderEngineName] = typeof(TProvider); - - return this; - } - - public Type GetProviderTypeOrNull(string templateRenderEngineName) - { - return templateRenderEngineName == null ? null : Providers.GetOrDefault(templateRenderEngineName); - } - } -} diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/FodyWeavers.xml rename to framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/FodyWeavers.xsd rename to framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo.Abp.TextTemplating.Abstractions.csproj b/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo.Abp.TextTemplating.Abstractions.csproj rename to framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs similarity index 52% rename from framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs index e59fd25d9e..4157910320 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTemplateRenderer.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTemplateRenderer.cs @@ -4,22 +4,21 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; -using Volo.Abp.TextTemplating.Scriban; namespace Volo.Abp.TextTemplating { public class AbpTemplateRenderer : ITemplateRenderer, ITransientDependency { - protected IServiceProvider ServiceProvider { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } protected ITemplateDefinitionManager TemplateDefinitionManager { get; } - protected AbpTemplateRendererProviderOptions Options { get; } + protected AbpTextTemplatingOptions Options { get; } public AbpTemplateRenderer( - IServiceProvider serviceProvider, + IServiceScopeFactory serviceScopeFactory, ITemplateDefinitionManager templateDefinitionManager, - IOptions options) + IOptions options) { - ServiceProvider = serviceProvider; + ServiceScopeFactory = serviceScopeFactory; TemplateDefinitionManager = templateDefinitionManager; Options = options.Value; } @@ -36,18 +35,21 @@ namespace Volo.Abp.TextTemplating if (renderEngine.IsNullOrWhiteSpace()) { - renderEngine = ScribanTemplateRendererProvider.ProviderName; + renderEngine = Options.DefaultRenderingEngine; } - var providerType = Options.GetProviderTypeOrNull(renderEngine); + var providerType = Options.RenderingEngines.GetOrDefault(renderEngine); - if (providerType != null) + if (providerType != null && typeof(ITemplateRenderingEngine).IsAssignableFrom(providerType)) { - var templateRendererProvider = (ITemplateRendererProvider)ServiceProvider.GetRequiredService(providerType); - return await templateRendererProvider.RenderAsync(templateName, model, cultureName, globalContext); + using (var scope = ServiceScopeFactory.CreateScope()) + { + var templateRenderingEngine = (ITemplateRenderingEngine)scope.ServiceProvider.GetRequiredService(providerType); + return await templateRenderingEngine.RenderAsync(templateName, model, cultureName, globalContext); + } } - throw new AbpException("There is no render engine found with template name: " + templateName); + throw new AbpException("There is no rendering engine found with template name: " + templateName); } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingAbstractionsModule.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingCoreModule.cs similarity index 95% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingAbstractionsModule.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingCoreModule.cs index bb76b299b2..8a908c2ffd 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingAbstractionsModule.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingCoreModule.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.TextTemplating typeof(AbpVirtualFileSystemModule), typeof(AbpLocalizationAbstractionsModule) )] - public class AbpTextTemplatingAbstractionsModule : AbpModule + public class AbpTextTemplatingCoreModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs similarity index 63% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs index b217094974..b3e4561fb1 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/AbpTextTemplatingOptions.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Collections; +using System; +using System.Collections.Generic; +using Volo.Abp.Collections; namespace Volo.Abp.TextTemplating { @@ -6,11 +8,15 @@ namespace Volo.Abp.TextTemplating { public ITypeList DefinitionProviders { get; } public ITypeList ContentContributors { get; } + public IDictionary RenderingEngines { get; } + + public string DefaultRenderingEngine { get; set; } public AbpTextTemplatingOptions() { DefinitionProviders = new TypeList(); ContentContributors = new TypeList(); + RenderingEngines = new Dictionary(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateContentContributor.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateContentContributor.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentContributor.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateContentProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateContentProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateContentProvider.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionContext.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionManager.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionProvider.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateDefinitionProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateDefinitionProvider.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRenderer.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRenderer.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderer.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs similarity index 95% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs index f2167f2781..f55dd03a1b 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/ITemplateRendererProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/ITemplateRenderingEngine.cs @@ -5,7 +5,7 @@ using JetBrains.Annotations; namespace Volo.Abp.TextTemplating { - public interface ITemplateRendererProvider + public interface ITemplateRenderingEngine { string Name { get; } diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentContributorContext.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateContentProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateContentProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateContentProvider.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs similarity index 98% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs index cda06eccd7..984bd8885b 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinition.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinition.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.TextTemplating public string DefaultCultureName { get; } [CanBeNull] - public string RenderEngine { get; protected set; } + public string RenderEngine { get; set; } /// /// Gets/sets a key-value on the . diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionProvider.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionProvider.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateDefinitionProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateDefinitionProvider.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs similarity index 92% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs index 5a44ee752e..4606e434ad 100644 --- a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/TemplateRendererProviderBase.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Localization; namespace Volo.Abp.TextTemplating { - public abstract class TemplateRendererProviderBase : ITemplateRendererProvider + public abstract class TemplateRenderingEngineBase : ITemplateRenderingEngine { public abstract string Name { get; } @@ -12,7 +12,7 @@ namespace Volo.Abp.TextTemplating protected readonly ITemplateContentProvider TemplateContentProvider; protected readonly IStringLocalizerFactory StringLocalizerFactory; - public TemplateRendererProviderBase( + public TemplateRenderingEngineBase( ITemplateDefinitionManager templateDefinitionManager, ITemplateContentProvider templateContentProvider, IStringLocalizerFactory stringLocalizerFactory) diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/FileInfoLocalizedTemplateContentReader.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReader.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReaderFactory.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReaderFactory.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/ILocalizedTemplateContentReaderFactory.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/NullLocalizedTemplateContentReader.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFileTemplateContentContributor.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs similarity index 100% rename from framework/src/Volo.Abp.TextTemplating.Abstractions/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs rename to framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/VirtualFolderLocalizedTemplateContentReader.cs diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj index f4d16e630c..3425fb624a 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs index c53f43ac6f..446ba00cc1 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpTextTemplatingRazorModule.cs @@ -1,17 +1,22 @@ -using Volo.Abp.Modularity; +using System; +using Volo.Abp.Modularity; namespace Volo.Abp.TextTemplating.Razor { [DependsOn( - typeof(AbpTextTemplatingAbstractionsModule) + typeof(AbpTextTemplatingCoreModule) )] public class AbpTextTemplatingRazorModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { - options.AddProvider(RazorTemplateRendererProvider.ProviderName); + if (options.DefaultRenderingEngine.IsNullOrWhiteSpace()) + { + options.DefaultRenderingEngine = RazorTemplateRenderingEngine.EngineName; + } + options.RenderingEngines[RazorTemplateRenderingEngine.EngineName] = typeof(RazorTemplateRenderingEngine); }); } } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateDefinitionExtensions.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateDefinitionExtensions.cs new file mode 100644 index 0000000000..1904e3004d --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateDefinitionExtensions.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.TextTemplating.Razor +{ + public static class RazorTemplateDefinitionExtensions + { + public static TemplateDefinition WithRazorTemplate([NotNull] this TemplateDefinition templateDefinition) + { + return templateDefinition.WithRenderEngine(RazorTemplateRenderingEngine.EngineName); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs similarity index 95% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs index 0559ace16e..3ef2d69fd6 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRendererProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderingEngine.cs @@ -12,15 +12,15 @@ using Volo.Abp.Localization; namespace Volo.Abp.TextTemplating.Razor { - public class RazorTemplateRendererProvider : TemplateRendererProviderBase, ITransientDependency + public class RazorTemplateRenderingEngine : TemplateRenderingEngineBase, ITransientDependency { - public const string ProviderName = "Razor"; - public override string Name => ProviderName; + public const string EngineName = "Razor"; + public override string Name => EngineName; protected readonly IServiceScopeFactory ServiceScopeFactory; protected readonly IAbpCompiledViewProvider AbpCompiledViewProvider; - public RazorTemplateRendererProvider( + public RazorTemplateRenderingEngine( IServiceScopeFactory serviceScopeFactory, IAbpCompiledViewProvider abpCompiledViewProvider, ITemplateDefinitionManager templateDefinitionManager, diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj index b4b0d66789..4581050b6a 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs index 2659f6b574..fb05325a95 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/AbpTextTemplatingScribanModule.cs @@ -3,15 +3,16 @@ namespace Volo.Abp.TextTemplating.Scriban { [DependsOn( - typeof(AbpTextTemplatingAbstractionsModule) + typeof(AbpTextTemplatingCoreModule) )] public class AbpTextTemplatingScribanModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { - options.AddProvider(ScribanTemplateRendererProvider.ProviderName); + options.DefaultRenderingEngine = ScribanTemplateRenderingEngine.EngineName; + options.RenderingEngines[ScribanTemplateRenderingEngine.EngineName] = typeof(ScribanTemplateRenderingEngine); }); } } diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateDefinitionExtensions.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateDefinitionExtensions.cs new file mode 100644 index 0000000000..4575539c4f --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateDefinitionExtensions.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.TextTemplating.Scriban +{ + public static class ScribanTemplateDefinitionExtensions + { + public static TemplateDefinition WithScribanTemplate([NotNull] this TemplateDefinition templateDefinition) + { + return templateDefinition.WithRenderEngine(ScribanTemplateRenderingEngine.EngineName); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs similarity index 94% rename from framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs index cecec2ab56..81038e2d0f 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRendererProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo/Abp/TextTemplating/Scriban/ScribanTemplateRenderingEngine.cs @@ -9,12 +9,12 @@ using Volo.Abp.Localization; namespace Volo.Abp.TextTemplating.Scriban { - public class ScribanTemplateRendererProvider : TemplateRendererProviderBase, ITransientDependency + public class ScribanTemplateRenderingEngine : TemplateRenderingEngineBase, ITransientDependency { - public const string ProviderName = "Scriban"; - public override string Name => ProviderName; + public const string EngineName = "Scriban"; + public override string Name => EngineName; - public ScribanTemplateRendererProvider( + public ScribanTemplateRenderingEngine( ITemplateDefinitionManager templateDefinitionManager, ITemplateContentProvider templateContentProvider, IStringLocalizerFactory stringLocalizerFactory) diff --git a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj index c48648b491..3af0ba984d 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj +++ b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj @@ -10,7 +10,6 @@ - diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs new file mode 100644 index 0000000000..4a94f3bb23 --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/AbpTextTemplatingModule.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.Modularity; +using Volo.Abp.TextTemplating.Scriban; + +namespace Volo.Abp.TextTemplating +{ + [Obsolete("Use AbpTextTemplatingScribanModule or AbpTextTemplatingRazorModule, This module will remove in the future.")] + [DependsOn(typeof(AbpTextTemplatingScribanModule))] + public class AbpTextTemplatingModule : AbpModule + { + + } +} diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs deleted file mode 100644 index 01296925a1..0000000000 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TextTemplating/AbpTextTemplatingModule.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Volo.Abp.Modularity; -using Volo.Abp.TextTemplating.Razor; -using Volo.Abp.TextTemplating.Scriban; - -namespace Volo.Abp.TextTemplating -{ - [DependsOn( - typeof(AbpTextTemplatingAbstractionsModule), - typeof(AbpTextTemplatingScribanModule), - typeof(AbpTextTemplatingRazorModule) - )] - public class AbpTextTemplatingModule : AbpModule - { - - } -} diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs index 0719a96a24..08576275f6 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTestTemplateDefinitionProvider.cs @@ -8,19 +8,19 @@ namespace Volo.Abp.TextTemplating.Razor { context.GetOrNull(TestTemplates.WelcomeEmail)? .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); + .WithRazorTemplate(); context.GetOrNull(TestTemplates.ForgotPasswordEmail)? .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.cshtml", true) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); + .WithRazorTemplate(); context.GetOrNull(TestTemplates.TestTemplateLayout1)? .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.cshtml", true) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); + .WithRazorTemplate(); context.GetOrNull(TestTemplates.ShowDecimalNumber)? .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.cshtml", true) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName); + .WithRazorTemplate(); context.Add(new TemplateDefinition(RazorTestTemplates.TestTemplate).WithVirtualFilePath("/SampleTemplates/TestTemplate.cshtml", true)); } diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs index d929a00e00..10de5d2886 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanTestTemplateDefinitionProvider.cs @@ -6,19 +6,19 @@ { context.GetOrNull(TestTemplates.WelcomeEmail)? .WithVirtualFilePath("/SampleTemplates/WelcomeEmail", false) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); + .WithScribanTemplate(); context.GetOrNull(TestTemplates.ForgotPasswordEmail)? .WithVirtualFilePath("/SampleTemplates/ForgotPasswordEmail.tpl", true) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); + .WithScribanTemplate(); context.GetOrNull(TestTemplates.TestTemplateLayout1)? .WithVirtualFilePath("/SampleTemplates/TestTemplateLayout1.tpl", true) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); + .WithScribanTemplate(); context.GetOrNull(TestTemplates.ShowDecimalNumber)? .WithVirtualFilePath("/SampleTemplates/ShowDecimalNumber.tpl", true) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName); + .WithScribanTemplate(); } } } diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj index 814b5a6922..b4964ed8e3 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj @@ -24,6 +24,8 @@ + + diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs index 3a32ad353b..66577cea75 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/AbpTextTemplatingTestModule.cs @@ -5,12 +5,14 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.TextTemplating.Localization; using Volo.Abp.TextTemplating.Razor; +using Volo.Abp.TextTemplating.Scriban; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.TextTemplating { [DependsOn( - typeof(AbpTextTemplatingModule), + typeof(AbpTextTemplatingScribanModule), + typeof(AbpTextTemplatingRazorModule), typeof(AbpTestBaseModule), typeof(AbpAutofacModule), typeof(AbpLocalizationModule) diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs index 5c111b5fd5..0015150288 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TestTemplateDefinitionProvider.cs @@ -45,7 +45,7 @@ namespace Volo.Abp.TextTemplating layout: null ) .WithVirtualFilePath("/SampleTemplates/TestScribanTemplate.tpl", true) - .WithRenderEngine(ScribanTemplateRendererProvider.ProviderName) + .WithScribanTemplate() ); context.Add( @@ -55,7 +55,7 @@ namespace Volo.Abp.TextTemplating layout: null ) .WithVirtualFilePath("/SampleTemplates/TestRazorTemplate.cshtml", true) - .WithRenderEngine(RazorTemplateRendererProvider.ProviderName) + .WithRazorTemplate() ); } } diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index cc20eac8bc..25e6eefd4a 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -139,8 +139,8 @@ $projects = ( "framework/src/Volo.Abp.Sms.Aliyun", "framework/src/Volo.Abp.Specifications", "framework/src/Volo.Abp.TestBase", - "framework/src/Volo.Abp.TextTemplating.Abstractions", "framework/src/Volo.Abp.TextTemplating", + "framework/src/Volo.Abp.TextTemplating.Core", "framework/src/Volo.Abp.TextTemplating.Razor", "framework/src/Volo.Abp.TextTemplating.Scriban", "framework/src/Volo.Abp.Threading",