diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpCompiledViewProviderOptions.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpCompiledViewProviderOptions.cs new file mode 100644 index 0000000000..6da3e8b443 --- /dev/null +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpCompiledViewProviderOptions.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using Microsoft.CodeAnalysis; + +namespace Volo.Abp.TextTemplating.Razor +{ + public class AbpCompiledViewProviderOptions + { + public Dictionary> TemplateReferences { get; } + + public AbpCompiledViewProviderOptions() + { + TemplateReferences = new Dictionary>(); + } + } +} diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompiler.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs similarity index 92% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompiler.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs index 5c6bc2d190..55b0d10f17 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompiler.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs @@ -12,11 +12,11 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.TextTemplating.Razor { - public class CSharpCompiler : ISingletonDependency + public class AbpRazorTemplateCSharpCompiler : ISingletonDependency { - protected CSharpCompilerOptions Options { get; } + protected AbpRazorTemplateCSharpCompilerOptions Options { get; } - public CSharpCompiler(IOptions options) + public AbpRazorTemplateCSharpCompiler(IOptions options) { Options = options.Value; } @@ -35,7 +35,7 @@ namespace Volo.Abp.TextTemplating.Razor Assembly.Load("Microsoft.Extensions.Localization"), Assembly.Load("Microsoft.Extensions.Localization.Abstractions"), - typeof(CSharpCompiler).Assembly + typeof(AbpRazorTemplateCSharpCompiler).Assembly } .Select(x => MetadataReference.CreateFromFile(x.Location)) .ToImmutableList(); diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompilerOptions.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompilerOptions.cs similarity index 71% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompilerOptions.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompilerOptions.cs index d419b83fca..20c1e391e0 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompilerOptions.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompilerOptions.cs @@ -3,11 +3,11 @@ using Microsoft.CodeAnalysis; namespace Volo.Abp.TextTemplating.Razor { - public class CSharpCompilerOptions + public class AbpRazorTemplateCSharpCompilerOptions { public List References { get; } - public CSharpCompilerOptions() + public AbpRazorTemplateCSharpCompilerOptions() { References = new List(); } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultCompiledViewProvider.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpCompiledViewProvider.cs similarity index 66% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultCompiledViewProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpCompiledViewProvider.cs index ff954b3b99..c743252456 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultCompiledViewProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpCompiledViewProvider.cs @@ -2,28 +2,35 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.CodeAnalysis; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; namespace Volo.Abp.TextTemplating.Razor { - public class DefaultCompiledViewProvider : ICompiledViewProvider, ITransientDependency + public class DefaultAbpCompiledViewProvider : IAbpCompiledViewProvider, ITransientDependency { private static readonly ConcurrentDictionary CachedAssembles = new ConcurrentDictionary(); - private readonly CSharpCompiler _cSharpCompiler; - private readonly IRazorProjectEngineFactory _razorProjectEngineFactory; + private readonly AbpCompiledViewProviderOptions _options; + private readonly AbpRazorTemplateCSharpCompiler _razorTemplateCSharpCompiler; + private readonly IAbpRazorProjectEngineFactory _razorProjectEngineFactory; private readonly ITemplateContentProvider _templateContentProvider; - public DefaultCompiledViewProvider( - IRazorProjectEngineFactory razorProjectEngineFactory, - CSharpCompiler cSharpCompiler, + public DefaultAbpCompiledViewProvider( + IOptions options, + IAbpRazorProjectEngineFactory razorProjectEngineFactory, + AbpRazorTemplateCSharpCompiler razorTemplateCSharpCompiler, ITemplateContentProvider templateContentProvider) { + _options = options.Value; + _razorProjectEngineFactory = razorProjectEngineFactory; - _cSharpCompiler = cSharpCompiler; + _razorTemplateCSharpCompiler = razorTemplateCSharpCompiler; _templateContentProvider = templateContentProvider; } @@ -58,7 +65,13 @@ namespace Volo.Abp.TextTemplating.Razor var cSharpDocument = codeDocument.GetCSharpDocument(); - return _cSharpCompiler.CreateAssembly(cSharpDocument.GeneratedCode, templateDefinition.Name); + var templateReferences = _options.TemplateReferences + .GetOrDefault(templateDefinition.Name) + ?.Select(x => x) + .Cast() + .ToList(); + + return _razorTemplateCSharpCompiler.CreateAssembly(cSharpDocument.GeneratedCode, templateDefinition.Name, templateReferences); } } } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultRazorProjectEngineFactory.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs similarity index 85% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultRazorProjectEngineFactory.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs index c402a26bb2..eb6d851f49 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultRazorProjectEngineFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs @@ -5,7 +5,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.TextTemplating.Razor { - public class DefaultRazorProjectEngineFactory : IRazorProjectEngineFactory, ITransientDependency + public class DefaultAbpRazorProjectEngineFactory : IAbpRazorProjectEngineFactory, ITransientDependency { public virtual async Task CreateAsync(Action configure = null) { diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/ICompiledViewProvider.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpCompiledViewProvider.cs similarity index 80% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/ICompiledViewProvider.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpCompiledViewProvider.cs index a0bc2043aa..ba5e96d2fa 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/ICompiledViewProvider.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpCompiledViewProvider.cs @@ -3,7 +3,7 @@ using System.Threading.Tasks; namespace Volo.Abp.TextTemplating.Razor { - public interface ICompiledViewProvider + public interface IAbpCompiledViewProvider { Task GetAssemblyAsync(TemplateDefinition templateDefinition); } diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorProjectEngineFactory.cs b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs similarity index 82% rename from framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorProjectEngineFactory.cs rename to framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs index 138a78b72f..c96b171f59 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorProjectEngineFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs @@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Razor.Language; namespace Volo.Abp.TextTemplating.Razor { - public interface IRazorProjectEngineFactory + public interface IAbpRazorProjectEngineFactory { Task CreateAsync(Action configure = null); } 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/RazorTemplateRenderer.cs index 6ec926b398..db06e67d4a 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/RazorTemplateRenderer.cs @@ -16,20 +16,20 @@ namespace Volo.Abp.TextTemplating.Razor public class RazorTemplateRenderer : ITemplateRenderer, ITransientDependency { private readonly IServiceScopeFactory _serviceScopeFactory; - private readonly ICompiledViewProvider _compiledViewProvider; + private readonly IAbpCompiledViewProvider _abpCompiledViewProvider; private readonly ITemplateDefinitionManager _templateDefinitionManager; private readonly IStringLocalizerFactory _stringLocalizerFactory; public RazorTemplateRenderer( IServiceScopeFactory serviceScopeFactory, - ICompiledViewProvider compiledViewProvider, + IAbpCompiledViewProvider abpCompiledViewProvider, ITemplateDefinitionManager templateDefinitionManager, IStringLocalizerFactory stringLocalizerFactory) { _serviceScopeFactory = serviceScopeFactory; _templateDefinitionManager = templateDefinitionManager; _stringLocalizerFactory = stringLocalizerFactory; - _compiledViewProvider = compiledViewProvider; + _abpCompiledViewProvider = abpCompiledViewProvider; } public virtual async Task RenderAsync( @@ -115,7 +115,7 @@ namespace Volo.Abp.TextTemplating.Razor Dictionary globalContext, object model = null) { - var assembly = await _compiledViewProvider.GetAssemblyAsync(templateDefinition); + var assembly = await _abpCompiledViewProvider.GetAssemblyAsync(templateDefinition); var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName); var template = (IRazorTemplatePage) Activator.CreateInstance(templateType); 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 6832f88dfa..df2f8b3b3d 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 @@ -17,7 +17,7 @@ namespace Volo.Abp.TextTemplating.Razor options.FileSets.AddEmbedded("Volo.Abp.TextTemplating.Razor"); }); - Configure(options => + Configure(options => { options.References.Add(MetadataReference.CreateFromFile(typeof(RazorTextTemplatingTestModule).Assembly.Location)); });