| File: RuntimeViewCompilerProvider.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Razor.RuntimeCompilation\src\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj (Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.Razor.Compilation; using Microsoft.AspNetCore.Razor.Language; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation; internal sealed class RuntimeViewCompilerProvider : IViewCompilerProvider { private readonly RazorProjectEngine _razorProjectEngine; private readonly ApplicationPartManager _applicationPartManager; private readonly CSharpCompiler _csharpCompiler; private readonly RuntimeCompilationFileProvider _fileProvider; private readonly ILogger<RuntimeViewCompiler> _logger; private readonly Func<IViewCompiler> _createCompiler; private object _initializeLock = new object(); private bool _initialized; private IViewCompiler? _compiler; public RuntimeViewCompilerProvider( ApplicationPartManager applicationPartManager, RazorProjectEngine razorProjectEngine, RuntimeCompilationFileProvider fileProvider, CSharpCompiler csharpCompiler, ILoggerFactory loggerFactory) { _applicationPartManager = applicationPartManager; _razorProjectEngine = razorProjectEngine; _csharpCompiler = csharpCompiler; _fileProvider = fileProvider; _logger = loggerFactory.CreateLogger<RuntimeViewCompiler>(); _createCompiler = CreateCompiler; } public IViewCompiler GetCompiler() { return LazyInitializer.EnsureInitialized( ref _compiler, ref _initialized, ref _initializeLock, _createCompiler)!; } private IViewCompiler CreateCompiler() { var feature = new ViewsFeature(); _applicationPartManager.PopulateFeature(feature); return new RuntimeViewCompiler( _fileProvider.FileProvider, _razorProjectEngine, _csharpCompiler, feature.ViewDescriptors, _logger); } }