File: SignalRDependencyInjectionExtensions.cs
Web Access
Project: src\src\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj (Microsoft.AspNetCore.SignalR.Core)
// 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.CodeAnalysis;
using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.SignalR.Internal;
using Microsoft.Extensions.DependencyInjection.Extensions;
 
namespace Microsoft.Extensions.DependencyInjection;
 
/// <summary>
/// Extension methods for <see cref="IServiceCollection"/>.
/// </summary>
public static class SignalRDependencyInjectionExtensions
{
    /// <summary>
    /// Adds the minimum essential SignalR services to the specified <see cref="IServiceCollection" />. Additional services
    /// must be added separately using the <see cref="ISignalRServerBuilder"/> returned from this method.
    /// </summary>
    /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
    /// <returns>An <see cref="ISignalRServerBuilder"/> that can be used to further configure the SignalR services.</returns>
    public static ISignalRServerBuilder AddSignalRCore(this IServiceCollection services)
    {
        services.TryAddSingleton<SignalRCoreMarkerService>();
        services.TryAddSingleton(typeof(HubLifetimeManager<>), typeof(DefaultHubLifetimeManager<>));
        services.TryAddSingleton(typeof(IHubProtocolResolver), typeof(DefaultHubProtocolResolver));
        services.TryAddSingleton(typeof(IHubContext<>), typeof(HubContext<>));
        AddTypedHubContext(services);
        services.TryAddSingleton(typeof(HubConnectionHandler<>), typeof(HubConnectionHandler<>));
        services.TryAddSingleton(typeof(IUserIdProvider), typeof(DefaultUserIdProvider));
        services.TryAddSingleton(typeof(HubDispatcher<>), typeof(DefaultHubDispatcher<>));
        services.TryAddScoped(typeof(IHubActivator<>), typeof(DefaultHubActivator<>));
        services.AddAuthorization();
 
        services.TryAddSingleton(new SignalRServerActivitySource());
 
        var builder = new SignalRServerBuilder(services);
        builder.AddJsonProtocol();
        return builder;
 
        [UnconditionalSuppressMessage("ReflectionAnalysis", "IL3050:RequiresDynamicCode",
            Justification = "HubContext<,>'s ctor creates a HubClients<,> instance, which generates code dynamically. " +
                "The property that accesses the HubClients<,> is annotated as RequiresDynamicCode on IHubContext<,>, so developers will get a warning when using it.")]
        static void AddTypedHubContext(IServiceCollection services)
        {
            services.TryAddSingleton(typeof(IHubContext<,>), typeof(HubContext<,>));
        }
    }
}