Update RazorProjectEngine to use RazorConfiguration.

- In this PR we do away with `CreateDesignTime` on the `RazorProjectEngine`. Instead we now have an overload that takes in a configuration and does the right thing.
- Updated `RazorProjectEngineBuilder` to have a configuration.
- Updated `RazorConfiguration` to only have a `Default`. Setting up a razor configuration for design time now requires calling code to construct the configuration manually.
This commit is contained in:
N. Taylor Mullen 2018-01-25 22:47:19 -08:00
parent 80f943caef
commit c0cb8f009c
11 changed files with 45 additions and 82 deletions

View File

@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
} }
builder.AddDirective(Directive); builder.AddDirective(Directive);
builder.Features.Add(new Pass(builder.DesignTime)); builder.Features.Add(new Pass(builder.Configuration.DesignTime));
return builder; return builder;
} }

View File

@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X
private static void EnsureDesignTime(RazorProjectEngineBuilder builder) private static void EnsureDesignTime(RazorProjectEngineBuilder builder)
{ {
if (builder.DesignTime) if (builder.Configuration.DesignTime)
{ {
return; return;
} }

View File

@ -29,7 +29,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
} }
builder.AddDirective(Directive); builder.AddDirective(Directive);
builder.Features.Add(new Pass(builder.DesignTime)); builder.Features.Add(new Pass(builder.Configuration.DesignTime));
return builder; return builder;
} }

View File

@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Extensions
builder.Features.Add(new RazorPageDocumentClassifierPass()); builder.Features.Add(new RazorPageDocumentClassifierPass());
builder.Features.Add(new MvcViewDocumentClassifierPass()); builder.Features.Add(new MvcViewDocumentClassifierPass());
if (!builder.DesignTime) if (!builder.Configuration.DesignTime)
{ {
builder.Features.Add(new AssemblyAttributeInjectionPass()); builder.Features.Add(new AssemblyAttributeInjectionPass());
builder.Features.Add(new InstrumentationPass()); builder.Features.Add(new InstrumentationPass());

View File

@ -9,14 +9,14 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
internal class DefaultRazorProjectEngineBuilder : RazorProjectEngineBuilder internal class DefaultRazorProjectEngineBuilder : RazorProjectEngineBuilder
{ {
public DefaultRazorProjectEngineBuilder(bool designTime, RazorProjectFileSystem fileSystem) public DefaultRazorProjectEngineBuilder(RazorConfiguration configuration, RazorProjectFileSystem fileSystem)
{ {
if (fileSystem == null) if (fileSystem == null)
{ {
throw new ArgumentNullException(nameof(fileSystem)); throw new ArgumentNullException(nameof(fileSystem));
} }
DesignTime = designTime; Configuration = configuration;
FileSystem = fileSystem; FileSystem = fileSystem;
Features = new List<IRazorFeature>(); Features = new List<IRazorFeature>();
Phases = new List<IRazorEnginePhase>(); Phases = new List<IRazorEnginePhase>();
@ -28,13 +28,13 @@ namespace Microsoft.AspNetCore.Razor.Language
public override IList<IRazorEnginePhase> Phases { get; } public override IList<IRazorEnginePhase> Phases { get; }
public override bool DesignTime { get; } public override RazorConfiguration Configuration { get; }
public override RazorProjectEngine Build() public override RazorProjectEngine Build()
{ {
RazorEngine engine = null; RazorEngine engine = null;
if (DesignTime) if (Configuration.DesignTime)
{ {
engine = RazorEngine.CreateDesignTimeEmpty(ConfigureRazorEngine); engine = RazorEngine.CreateDesignTimeEmpty(ConfigureRazorEngine);
} }

View File

@ -7,8 +7,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
public sealed class RazorConfiguration public sealed class RazorConfiguration
{ {
public static readonly RazorConfiguration DefaultRuntime = new RazorConfiguration(RazorLanguageVersion.Latest, designTime: false); public static readonly RazorConfiguration Default = new RazorConfiguration(RazorLanguageVersion.Latest, designTime: false);
public static readonly RazorConfiguration DefaultDesignTime = new RazorConfiguration(RazorLanguageVersion.Latest, designTime: true);
public RazorConfiguration(RazorLanguageVersion languageVersion, bool designTime) public RazorConfiguration(RazorLanguageVersion languageVersion, bool designTime)
{ {

View File

@ -17,14 +17,15 @@ namespace Microsoft.AspNetCore.Razor.Language
return Create(configure: null); return Create(configure: null);
} }
public static RazorEngine Create(Action<IRazorEngineBuilder> configure) => CreateCore(RazorConfiguration.DefaultRuntime, configure); public static RazorEngine Create(Action<IRazorEngineBuilder> configure) => CreateCore(RazorConfiguration.Default, configure);
public static RazorEngine CreateDesignTime() public static RazorEngine CreateDesignTime()
{ {
return CreateDesignTime(configure: null); return CreateDesignTime(configure: null);
} }
public static RazorEngine CreateDesignTime(Action<IRazorEngineBuilder> configure) => CreateCore(RazorConfiguration.DefaultDesignTime, configure); public static RazorEngine CreateDesignTime(Action<IRazorEngineBuilder> configure)
=> CreateCore(new RazorConfiguration(RazorLanguageVersion.Latest, designTime: true), configure);
// Internal since RazorEngine APIs are going to be obsolete. // Internal since RazorEngine APIs are going to be obsolete.
internal static RazorEngine CreateCore(RazorConfiguration configuration, Action<IRazorEngineBuilder> configure) internal static RazorEngine CreateCore(RazorConfiguration configuration, Action<IRazorEngineBuilder> configure)

View File

@ -20,78 +20,41 @@ namespace Microsoft.AspNetCore.Razor.Language
public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem) => Create(fileSystem, configure: null); public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem) => Create(fileSystem, configure: null);
public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure) public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure) => Create(fileSystem, RazorConfiguration.Default, configure);
public static RazorProjectEngine Create(
RazorProjectFileSystem fileSystem,
RazorConfiguration configuration,
Action<RazorProjectEngineBuilder> configure)
{ {
if (fileSystem == null) if (fileSystem == null)
{ {
throw new ArgumentNullException(nameof(fileSystem)); throw new ArgumentNullException(nameof(fileSystem));
} }
var builder = new DefaultRazorProjectEngineBuilder(designTime: false, fileSystem: fileSystem); if (configuration == null)
{
throw new ArgumentNullException(nameof(configuration));
}
var builder = new DefaultRazorProjectEngineBuilder(configuration, fileSystem);
AddDefaults(builder); AddDefaults(builder);
AddRuntimeDefaults(builder);
if (configuration.DesignTime)
{
AddDesignTimeDefaults(builder);
}
else
{
AddRuntimeDefaults(builder);
}
configure?.Invoke(builder); configure?.Invoke(builder);
return builder.Build(); return builder.Build();
} }
public static RazorProjectEngine CreateDesignTime(RazorProjectFileSystem fileSystem) => CreateDesignTime(fileSystem, configure: null);
public static RazorProjectEngine CreateDesignTime(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: true, fileSystem: fileSystem);
AddDefaults(builder);
AddDesignTimeDefaults(builder);
configure?.Invoke(builder);
return builder.Build();
}
public static RazorProjectEngine CreateEmpty(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: false, fileSystem: fileSystem);
configure(builder);
return builder.Build();
}
public static RazorProjectEngine CreateDesignTimeEmpty(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: true, fileSystem: fileSystem);
configure(builder);
return builder.Build();
}
private static void AddDefaults(RazorProjectEngineBuilder builder) private static void AddDefaults(RazorProjectEngineBuilder builder)
{ {
builder.Features.Add(new DefaultRazorImportFeature()); builder.Features.Add(new DefaultRazorImportFeature());
@ -101,7 +64,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
var engineFeatures = new List<IRazorEngineFeature>(); var engineFeatures = new List<IRazorEngineFeature>();
RazorEngine.AddDefaultFeatures(engineFeatures); RazorEngine.AddDefaultFeatures(engineFeatures);
RazorEngine.AddDefaultDesignTimeFeatures(engineFeatures); RazorEngine.AddDefaultDesignTimeFeatures(builder.Configuration, engineFeatures);
AddEngineFeaturesAndPhases(builder, engineFeatures); AddEngineFeaturesAndPhases(builder, engineFeatures);
} }
@ -110,7 +73,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
var engineFeatures = new List<IRazorEngineFeature>(); var engineFeatures = new List<IRazorEngineFeature>();
RazorEngine.AddDefaultFeatures(engineFeatures); RazorEngine.AddDefaultFeatures(engineFeatures);
RazorEngine.AddDefaultRuntimeFeatures(engineFeatures); RazorEngine.AddDefaultRuntimeFeatures(builder.Configuration, engineFeatures);
AddEngineFeaturesAndPhases(builder, engineFeatures); AddEngineFeaturesAndPhases(builder, engineFeatures);
} }

View File

@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public abstract IList<IRazorEnginePhase> Phases { get; } public abstract IList<IRazorEnginePhase> Phases { get; }
public abstract bool DesignTime { get; } public abstract RazorConfiguration Configuration { get; }
public abstract RazorProjectEngine Build(); public abstract RazorProjectEngine Build();
} }

View File

@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void Build_AddsFeaturesToRazorEngine() public void Build_AddsFeaturesToRazorEngine()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
builder.Features.Add(Mock.Of<IRazorEngineFeature>()); builder.Features.Add(Mock.Of<IRazorEngineFeature>());
builder.Features.Add(Mock.Of<IRazorEngineFeature>()); builder.Features.Add(Mock.Of<IRazorEngineFeature>());
builder.Features.Add(Mock.Of<IRazorProjectEngineFeature>()); builder.Features.Add(Mock.Of<IRazorProjectEngineFeature>());
@ -33,7 +33,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void Build_AddsPhasesToRazorEngine() public void Build_AddsPhasesToRazorEngine()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
builder.Phases.Add(Mock.Of<IRazorEnginePhase>()); builder.Phases.Add(Mock.Of<IRazorEnginePhase>());
builder.Phases.Add(Mock.Of<IRazorEnginePhase>()); builder.Phases.Add(Mock.Of<IRazorEnginePhase>());
@ -53,7 +53,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
// Arrange // Arrange
var fileSystem = Mock.Of<RazorProjectFileSystem>(); var fileSystem = Mock.Of<RazorProjectFileSystem>();
var builder = new DefaultRazorProjectEngineBuilder(false, fileSystem); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, fileSystem);
// Act // Act
var projectEngine = builder.Build(); var projectEngine = builder.Build();

View File

@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void SetImportFeature_SetsTheImportFeature() public void SetImportFeature_SetsTheImportFeature()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
var testFeature1 = Mock.Of<IRazorImportFeature>(); var testFeature1 = Mock.Of<IRazorImportFeature>();
var testFeature2 = Mock.Of<IRazorImportFeature>(); var testFeature2 = Mock.Of<IRazorImportFeature>();
builder.Features.Add(testFeature1); builder.Features.Add(testFeature1);
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void AddTargetExtension_CreatesAndAddsToTargetExtensionFeatureIfItDoesNotExist() public void AddTargetExtension_CreatesAndAddsToTargetExtensionFeatureIfItDoesNotExist()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
var expectedExtension = Mock.Of<ICodeTargetExtension>(); var expectedExtension = Mock.Of<ICodeTargetExtension>();
// Act // Act
@ -49,7 +49,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void AddTargetExtension_UsesExistingFeatureIfExistsAndAddsTo() public void AddTargetExtension_UsesExistingFeatureIfExistsAndAddsTo()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
var codeTargetExtensionFeature = new DefaultRazorTargetExtensionFeature(); var codeTargetExtensionFeature = new DefaultRazorTargetExtensionFeature();
builder.Features.Add(codeTargetExtensionFeature); builder.Features.Add(codeTargetExtensionFeature);
var expectedExtension = Mock.Of<ICodeTargetExtension>(); var expectedExtension = Mock.Of<ICodeTargetExtension>();
@ -68,7 +68,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void AddDirective_CreatesAndAddsToDirectiveFeatureIfItDoesNotExist() public void AddDirective_CreatesAndAddsToDirectiveFeatureIfItDoesNotExist()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
var expectedDirective = Mock.Of<DirectiveDescriptor>(); var expectedDirective = Mock.Of<DirectiveDescriptor>();
// Act // Act
@ -85,7 +85,7 @@ namespace Microsoft.AspNetCore.Razor.Language
public void AddDirective_UsesExistingFeatureIfExistsAndAddsTo() public void AddDirective_UsesExistingFeatureIfExistsAndAddsTo()
{ {
// Arrange // Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>()); var builder = new DefaultRazorProjectEngineBuilder(RazorConfiguration.Default, Mock.Of<RazorProjectFileSystem>());
var directiveFeature = new DefaultRazorDirectiveFeature(); var directiveFeature = new DefaultRazorDirectiveFeature();
builder.Features.Add(directiveFeature); builder.Features.Add(directiveFeature);
var expecteDirective = Mock.Of<DirectiveDescriptor>(); var expecteDirective = Mock.Of<DirectiveDescriptor>();