File: ViewComponents\DefaultViewComponentInvokerFactory.cs
Web Access
Project: src\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics;
using Microsoft.Extensions.Logging;
 
namespace Microsoft.AspNetCore.Mvc.ViewComponents;
 
internal sealed class DefaultViewComponentInvokerFactory : IViewComponentInvokerFactory
{
    private readonly IViewComponentFactory _viewComponentFactory;
    private readonly ViewComponentInvokerCache _viewComponentInvokerCache;
    private readonly ILogger _logger;
    private readonly DiagnosticListener _diagnosticListener;
 
    public DefaultViewComponentInvokerFactory(
        IViewComponentFactory viewComponentFactory,
        ViewComponentInvokerCache viewComponentInvokerCache,
        DiagnosticListener diagnosticListener,
        ILoggerFactory loggerFactory)
    {
        ArgumentNullException.ThrowIfNull(viewComponentFactory);
        ArgumentNullException.ThrowIfNull(viewComponentInvokerCache);
        ArgumentNullException.ThrowIfNull(diagnosticListener);
        ArgumentNullException.ThrowIfNull(loggerFactory);
 
        _viewComponentFactory = viewComponentFactory;
        _diagnosticListener = diagnosticListener;
        _viewComponentInvokerCache = viewComponentInvokerCache;
 
        _logger = loggerFactory.CreateLogger<DefaultViewComponentInvoker>();
    }
 
    /// <inheritdoc />
    // We don't currently make use of the descriptor or the arguments here (they are available on the context).
    // We might do this some day to cache which method we select, so resist the urge to 'clean' this without
    // considering that possibility.
    public IViewComponentInvoker CreateInstance(ViewComponentContext context)
    {
        ArgumentNullException.ThrowIfNull(context);
 
        return new DefaultViewComponentInvoker(
            _viewComponentFactory,
            _viewComponentInvokerCache,
            _diagnosticListener,
            _logger);
    }
}