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",