Merge pull request #12693 from umbraco/v10/feature/runtimemodevalidatorcollection
Add RuntimeModeValidator collection builder
This commit is contained in:
@@ -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>();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{ }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user