Browse Source

Add AbpCompiledViewProviderOptions

pull/8392/head
maliming 6 years ago
parent
commit
3e4ccc3a9a
  1. 15
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpCompiledViewProviderOptions.cs
  2. 8
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompiler.cs
  3. 4
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompilerOptions.cs
  4. 29
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpCompiledViewProvider.cs
  5. 2
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpRazorProjectEngineFactory.cs
  6. 2
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpCompiledViewProvider.cs
  7. 2
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IAbpRazorProjectEngineFactory.cs
  8. 8
      framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/RazorTemplateRenderer.cs
  9. 2
      framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorTextTemplatingTestModule.cs

15
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<string, List<PortableExecutableReference>> TemplateReferences { get; }
public AbpCompiledViewProviderOptions()
{
TemplateReferences = new Dictionary<string, List<PortableExecutableReference>>();
}
}
}

8
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompiler.cs → 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 namespace Volo.Abp.TextTemplating.Razor
{ {
public class CSharpCompiler : ISingletonDependency public class AbpRazorTemplateCSharpCompiler : ISingletonDependency
{ {
protected CSharpCompilerOptions Options { get; } protected AbpRazorTemplateCSharpCompilerOptions Options { get; }
public CSharpCompiler(IOptions<CSharpCompilerOptions> options) public AbpRazorTemplateCSharpCompiler(IOptions<AbpRazorTemplateCSharpCompilerOptions> options)
{ {
Options = options.Value; Options = options.Value;
} }
@ -35,7 +35,7 @@ namespace Volo.Abp.TextTemplating.Razor
Assembly.Load("Microsoft.Extensions.Localization"), Assembly.Load("Microsoft.Extensions.Localization"),
Assembly.Load("Microsoft.Extensions.Localization.Abstractions"), Assembly.Load("Microsoft.Extensions.Localization.Abstractions"),
typeof(CSharpCompiler).Assembly typeof(AbpRazorTemplateCSharpCompiler).Assembly
} }
.Select(x => MetadataReference.CreateFromFile(x.Location)) .Select(x => MetadataReference.CreateFromFile(x.Location))
.ToImmutableList(); .ToImmutableList();

4
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/CSharpCompilerOptions.cs → framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/AbpRazorTemplateCSharpCompilerOptions.cs

@ -3,11 +3,11 @@ using Microsoft.CodeAnalysis;
namespace Volo.Abp.TextTemplating.Razor namespace Volo.Abp.TextTemplating.Razor
{ {
public class CSharpCompilerOptions public class AbpRazorTemplateCSharpCompilerOptions
{ {
public List<PortableExecutableReference> References { get; } public List<PortableExecutableReference> References { get; }
public CSharpCompilerOptions() public AbpRazorTemplateCSharpCompilerOptions()
{ {
References = new List<PortableExecutableReference>(); References = new List<PortableExecutableReference>();
} }

29
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultCompiledViewProvider.cs → framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultAbpCompiledViewProvider.cs

@ -2,28 +2,35 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.TextTemplating.Razor namespace Volo.Abp.TextTemplating.Razor
{ {
public class DefaultCompiledViewProvider : ICompiledViewProvider, ITransientDependency public class DefaultAbpCompiledViewProvider : IAbpCompiledViewProvider, ITransientDependency
{ {
private static readonly ConcurrentDictionary<string, Assembly> CachedAssembles = new ConcurrentDictionary<string, Assembly>(); private static readonly ConcurrentDictionary<string, Assembly> CachedAssembles = new ConcurrentDictionary<string, Assembly>();
private readonly CSharpCompiler _cSharpCompiler; private readonly AbpCompiledViewProviderOptions _options;
private readonly IRazorProjectEngineFactory _razorProjectEngineFactory; private readonly AbpRazorTemplateCSharpCompiler _razorTemplateCSharpCompiler;
private readonly IAbpRazorProjectEngineFactory _razorProjectEngineFactory;
private readonly ITemplateContentProvider _templateContentProvider; private readonly ITemplateContentProvider _templateContentProvider;
public DefaultCompiledViewProvider( public DefaultAbpCompiledViewProvider(
IRazorProjectEngineFactory razorProjectEngineFactory, IOptions<AbpCompiledViewProviderOptions> options,
CSharpCompiler cSharpCompiler, IAbpRazorProjectEngineFactory razorProjectEngineFactory,
AbpRazorTemplateCSharpCompiler razorTemplateCSharpCompiler,
ITemplateContentProvider templateContentProvider) ITemplateContentProvider templateContentProvider)
{ {
_options = options.Value;
_razorProjectEngineFactory = razorProjectEngineFactory; _razorProjectEngineFactory = razorProjectEngineFactory;
_cSharpCompiler = cSharpCompiler; _razorTemplateCSharpCompiler = razorTemplateCSharpCompiler;
_templateContentProvider = templateContentProvider; _templateContentProvider = templateContentProvider;
} }
@ -58,7 +65,13 @@ namespace Volo.Abp.TextTemplating.Razor
var cSharpDocument = codeDocument.GetCSharpDocument(); var cSharpDocument = codeDocument.GetCSharpDocument();
return _cSharpCompiler.CreateAssembly(cSharpDocument.GeneratedCode, templateDefinition.Name); var templateReferences = _options.TemplateReferences
.GetOrDefault(templateDefinition.Name)
?.Select(x => x)
.Cast<MetadataReference>()
.ToList();
return _razorTemplateCSharpCompiler.CreateAssembly(cSharpDocument.GeneratedCode, templateDefinition.Name, templateReferences);
} }
} }
} }

2
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/DefaultRazorProjectEngineFactory.cs → 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 namespace Volo.Abp.TextTemplating.Razor
{ {
public class DefaultRazorProjectEngineFactory : IRazorProjectEngineFactory, ITransientDependency public class DefaultAbpRazorProjectEngineFactory : IAbpRazorProjectEngineFactory, ITransientDependency
{ {
public virtual async Task<RazorProjectEngine> CreateAsync(Action<RazorProjectEngineBuilder> configure = null) public virtual async Task<RazorProjectEngine> CreateAsync(Action<RazorProjectEngineBuilder> configure = null)
{ {

2
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/ICompiledViewProvider.cs → 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 namespace Volo.Abp.TextTemplating.Razor
{ {
public interface ICompiledViewProvider public interface IAbpCompiledViewProvider
{ {
Task<Assembly> GetAssemblyAsync(TemplateDefinition templateDefinition); Task<Assembly> GetAssemblyAsync(TemplateDefinition templateDefinition);
} }

2
framework/src/Volo.Abp.TextTemplating.Razor/Volo/Abp/TextTemplating/Razor/IRazorProjectEngineFactory.cs → 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 namespace Volo.Abp.TextTemplating.Razor
{ {
public interface IRazorProjectEngineFactory public interface IAbpRazorProjectEngineFactory
{ {
Task<RazorProjectEngine> CreateAsync(Action<RazorProjectEngineBuilder> configure = null); Task<RazorProjectEngine> CreateAsync(Action<RazorProjectEngineBuilder> configure = null);
} }

8
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 public class RazorTemplateRenderer : ITemplateRenderer, ITransientDependency
{ {
private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly ICompiledViewProvider _compiledViewProvider; private readonly IAbpCompiledViewProvider _abpCompiledViewProvider;
private readonly ITemplateDefinitionManager _templateDefinitionManager; private readonly ITemplateDefinitionManager _templateDefinitionManager;
private readonly IStringLocalizerFactory _stringLocalizerFactory; private readonly IStringLocalizerFactory _stringLocalizerFactory;
public RazorTemplateRenderer( public RazorTemplateRenderer(
IServiceScopeFactory serviceScopeFactory, IServiceScopeFactory serviceScopeFactory,
ICompiledViewProvider compiledViewProvider, IAbpCompiledViewProvider abpCompiledViewProvider,
ITemplateDefinitionManager templateDefinitionManager, ITemplateDefinitionManager templateDefinitionManager,
IStringLocalizerFactory stringLocalizerFactory) IStringLocalizerFactory stringLocalizerFactory)
{ {
_serviceScopeFactory = serviceScopeFactory; _serviceScopeFactory = serviceScopeFactory;
_templateDefinitionManager = templateDefinitionManager; _templateDefinitionManager = templateDefinitionManager;
_stringLocalizerFactory = stringLocalizerFactory; _stringLocalizerFactory = stringLocalizerFactory;
_compiledViewProvider = compiledViewProvider; _abpCompiledViewProvider = abpCompiledViewProvider;
} }
public virtual async Task<string> RenderAsync( public virtual async Task<string> RenderAsync(
@ -115,7 +115,7 @@ namespace Volo.Abp.TextTemplating.Razor
Dictionary<string, object> globalContext, Dictionary<string, object> globalContext,
object model = null) object model = null)
{ {
var assembly = await _compiledViewProvider.GetAssemblyAsync(templateDefinition); var assembly = await _abpCompiledViewProvider.GetAssemblyAsync(templateDefinition);
var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName); var templateType = assembly.GetType(AbpRazorTemplateConsts.TypeName);
var template = (IRazorTemplatePage) Activator.CreateInstance(templateType); var template = (IRazorTemplatePage) Activator.CreateInstance(templateType);

2
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<RazorTextTemplatingTestModule>("Volo.Abp.TextTemplating.Razor"); options.FileSets.AddEmbedded<RazorTextTemplatingTestModule>("Volo.Abp.TextTemplating.Razor");
}); });
Configure<CSharpCompilerOptions>(options => Configure<AbpRazorTemplateCSharpCompilerOptions>(options =>
{ {
options.References.Add(MetadataReference.CreateFromFile(typeof(RazorTextTemplatingTestModule).Assembly.Location)); options.References.Add(MetadataReference.CreateFromFile(typeof(RazorTextTemplatingTestModule).Assembly.Location));
}); });

Loading…
Cancel
Save