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
{
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;
}
@ -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();

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
{
public class CSharpCompilerOptions
public class AbpRazorTemplateCSharpCompilerOptions
{
public List<PortableExecutableReference> References { get; }
public CSharpCompilerOptions()
public AbpRazorTemplateCSharpCompilerOptions()
{
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.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<string, Assembly> CachedAssembles = new ConcurrentDictionary<string, Assembly>();
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<AbpCompiledViewProviderOptions> 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<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
{
public class DefaultRazorProjectEngineFactory : IRazorProjectEngineFactory, ITransientDependency
public class DefaultAbpRazorProjectEngineFactory : IAbpRazorProjectEngineFactory, ITransientDependency
{
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
{
public interface ICompiledViewProvider
public interface IAbpCompiledViewProvider
{
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
{
public interface IRazorProjectEngineFactory
public interface IAbpRazorProjectEngineFactory
{
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
{
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<string> RenderAsync(
@ -115,7 +115,7 @@ namespace Volo.Abp.TextTemplating.Razor
Dictionary<string, object> 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);

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

Loading…
Cancel
Save