Merge pull request #12693 from umbraco/v10/feature/runtimemodevalidatorcollection

Add RuntimeModeValidator collection builder
This commit is contained in:
Nikolaj Geisle
2022-07-15 09:40:12 +02:00
committed by GitHub
5 changed files with 49 additions and 8 deletions

View File

@@ -2,6 +2,7 @@ using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Packaging;
using Umbraco.Cms.Infrastructure.Persistence;
using Umbraco.Cms.Infrastructure.Persistence.Mappers;
using Umbraco.Cms.Infrastructure.Runtime;
namespace Umbraco.Extensions;
@@ -17,6 +18,10 @@ public static partial class UmbracoBuilderExtensions
public static MapperCollectionBuilder? Mappers(this IUmbracoBuilder builder)
=> builder.WithCollectionBuilder<MapperCollectionBuilder>();
/// <summary>
/// Gets the NPoco mappers collection builder.
/// </summary>
/// <param name="builder">The builder.</param>
public static NPocoMapperCollectionBuilder? NPocoMappers(this IUmbracoBuilder builder)
=> builder.WithCollectionBuilder<NPocoMapperCollectionBuilder>();
@@ -26,4 +31,11 @@ public static partial class UmbracoBuilderExtensions
/// <param name="builder">The builder.</param>
public static PackageMigrationPlanCollectionBuilder? PackageMigrationPlans(this IUmbracoBuilder builder)
=> builder.WithCollectionBuilder<PackageMigrationPlanCollectionBuilder>();
/// <summary>
/// Gets the runtime mode validators collection builder.
/// </summary>
/// <param name="builder">The builder.</param>
public static RuntimeModeValidatorCollectionBuilder RuntimeModeValidators(this IUmbracoBuilder builder)
=> builder.WithCollectionBuilder<RuntimeModeValidatorCollectionBuilder>();
}

View File

@@ -86,11 +86,12 @@ public static partial class UmbracoBuilderExtensions
// Add runtime mode validation
builder.Services.AddSingleton<IRuntimeModeValidationService, RuntimeModeValidationService>();
builder.Services.AddTransient<IRuntimeModeValidator, JITOptimizerValidator>();
builder.Services.AddTransient<IRuntimeModeValidator, UmbracoApplicationUrlValidator>();
builder.Services.AddTransient<IRuntimeModeValidator, UseHttpsValidator>();
builder.Services.AddTransient<IRuntimeModeValidator, RuntimeMinificationValidator>();
builder.Services.AddTransient<IRuntimeModeValidator, ModelsBuilderModeValidator>();
builder.RuntimeModeValidators()
.Add<JITOptimizerValidator>()
.Add<UmbracoApplicationUrlValidator>()
.Add<UseHttpsValidator>()
.Add<RuntimeMinificationValidator>()
.Add<ModelsBuilderModeValidator>();
// composers
builder

View File

@@ -29,11 +29,18 @@ internal class RuntimeModeValidationService : IRuntimeModeValidationService
var validationMessages = new List<string>();
// Runtime mode validators are registered transient, but this service is registered as singleton
foreach (var runtimeModeValidator in _serviceProvider.GetServices<IRuntimeModeValidator>())
using (var scope = _serviceProvider.CreateScope())
{
if (runtimeModeValidator.Validate(runtimeMode, out var validationMessage) == false)
var runtimeModeValidators = scope.ServiceProvider.GetService<RuntimeModeValidatorCollection>();
if (runtimeModeValidators is not null)
{
validationMessages.Add(validationMessage);
foreach (var runtimeModeValidator in runtimeModeValidators)
{
if (runtimeModeValidator.Validate(runtimeMode, out var validationMessage) == false)
{
validationMessages.Add(validationMessage);
}
}
}
}

View File

@@ -0,0 +1,10 @@
using Umbraco.Cms.Core.Composing;
namespace Umbraco.Cms.Infrastructure.Runtime;
public class RuntimeModeValidatorCollection : BuilderCollectionBase<IRuntimeModeValidator>
{
public RuntimeModeValidatorCollection(Func<IEnumerable<IRuntimeModeValidator>> items)
: base(items)
{ }
}

View File

@@ -0,0 +1,11 @@
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core.Composing;
namespace Umbraco.Cms.Infrastructure.Runtime;
public class RuntimeModeValidatorCollectionBuilder : SetCollectionBuilderBase<RuntimeModeValidatorCollectionBuilder, RuntimeModeValidatorCollection, IRuntimeModeValidator>
{
protected override ServiceLifetime CollectionLifetime => ServiceLifetime.Transient;
protected override RuntimeModeValidatorCollectionBuilder This => this;
}