Add LazyReferenceMetadataFeature
This commit is contained in:
parent
681b798a2e
commit
9fe480f735
|
|
@ -155,13 +155,13 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
// creating the singleton RazorViewEngine instance.
|
||||
services.TryAddTransient<IRazorPageFactoryProvider, DefaultRazorPageFactoryProvider>();
|
||||
|
||||
|
||||
//
|
||||
// Razor compilation infrastructure
|
||||
//
|
||||
services.TryAddSingleton<RazorProject, DefaultRazorProject>();
|
||||
services.TryAddSingleton<RazorTemplateEngine, MvcRazorTemplateEngine>();
|
||||
services.TryAddSingleton<RazorCompiler>();
|
||||
services.TryAddSingleton<LazyMetadataReferenceFeature>();
|
||||
|
||||
services.TryAddSingleton<RazorEngine>(s =>
|
||||
{
|
||||
|
|
@ -171,11 +171,8 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
|
||||
b.Features.Add(new Microsoft.CodeAnalysis.Razor.DefaultTagHelperFeature());
|
||||
|
||||
var referenceManager = s.GetRequiredService<RazorReferenceManager>();
|
||||
b.Features.Add(new Microsoft.CodeAnalysis.Razor.DefaultMetadataReferenceFeature()
|
||||
{
|
||||
References = referenceManager.CompilationReferences.ToArray(),
|
||||
});
|
||||
var metadataReferenceFeature = s.GetRequiredService<LazyMetadataReferenceFeature>();
|
||||
b.Features.Add(metadataReferenceFeature);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Razor.Language;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Razor;
|
||||
|
||||
namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
||||
{
|
||||
public class LazyMetadataReferenceFeature : IMetadataReferenceFeature
|
||||
{
|
||||
private readonly RazorReferenceManager _referenceManager;
|
||||
|
||||
public LazyMetadataReferenceFeature(RazorReferenceManager referenceManager)
|
||||
{
|
||||
_referenceManager = referenceManager;
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// Invoking <see cref="RazorReferenceManager.CompilationReferences"/> ensures that compilation
|
||||
/// references are lazily evaluated.
|
||||
/// </remarks>
|
||||
public IReadOnlyList<MetadataReference> References => _referenceManager.CompilationReferences;
|
||||
|
||||
public RazorEngine Engine { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
||||
|
|
@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
private readonly IList<MetadataReference> _additionalMetadataReferences;
|
||||
private object _compilationReferencesLock = new object();
|
||||
private bool _compilationReferencesInitialized;
|
||||
private IList<MetadataReference> _compilationReferences;
|
||||
private IReadOnlyList<MetadataReference> _compilationReferences;
|
||||
|
||||
public RazorReferenceManager(
|
||||
ApplicationPartManager partManager,
|
||||
|
|
@ -26,7 +27,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
_additionalMetadataReferences = optionsAccessor.Value.AdditionalCompilationReferences;
|
||||
}
|
||||
|
||||
public IList<MetadataReference> CompilationReferences
|
||||
public IReadOnlyList<MetadataReference> CompilationReferences
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -38,7 +39,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
}
|
||||
}
|
||||
|
||||
private IList<MetadataReference> GetCompilationReferences()
|
||||
private IReadOnlyList<MetadataReference> GetCompilationReferences()
|
||||
{
|
||||
var feature = new MetadataReferenceFeature();
|
||||
_partManager.PopulateFeature(feature);
|
||||
|
|
@ -46,7 +47,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
|
|||
|
||||
if (_additionalMetadataReferences.Count == 0)
|
||||
{
|
||||
return applicationReferences;
|
||||
return applicationReferences.ToArray();
|
||||
}
|
||||
|
||||
var compilationReferences = new List<MetadataReference>(applicationReferences.Count + _additionalMetadataReferences.Count);
|
||||
|
|
|
|||
Loading…
Reference in New Issue