dotnet/aspnetcore

HubClientProxyGenerator doesn't run when using inferred generic type arguments

Open

#43,510 opened on Aug 24, 2022

View on GitHub
 (4 comments) (0 reactions) (1 assignee)C# (10,653 forks)batch import
area-signalrbughelp wanted

Repository metrics

Stars
 (37,933 stars)
PR merge metrics
 (Avg merge 16d 9h) (258 merged PRs in 30d)

Description

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

SignalR client proxy code isn't generated when using the extension method with auto-inferred type arguments (as suggested by Visual Studio).

Expected Behavior

The proxy code is generated.

Steps To Reproduce

Add Microsoft.AspNetCore.SignalR.Client.SourceGenerator package reference, add this code to a C# file:

using Microsoft.AspNetCore.SignalR.Client;

namespace ConsoleApp4;

internal static class Program
{
    static HubConnection hubConnection = null!;

    static void Main()
    {
        hubConnection = new HubConnectionBuilder().WithUrl("...").Build();
    }

    static void Register(IClient client)
    {
        // \/ Remove type argument here \/
        hubConnection.RegisterClient<IClient>(client);
    }
}

[AttributeUsage(AttributeTargets.Method)]
internal class HubServerProxyAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Method)]
internal class HubClientProxyAttribute : Attribute
{
}

internal static partial class MyCustomExtensions
{
    [HubClientProxy]
    public static partial IDisposable RegisterClient<T>(this HubConnection connection, T provider);

    [HubServerProxy]
    public static partial T GetServerProxy<T>(this HubConnection connection);
}

public interface IServerHub
{
    Task SendMessage(string message);
}

public interface IClient
{
    Task ReceiveMessage(string message);
}

public class Client : IClient
{
    public Task ReceiveMessage(string message) => Task.CompletedTask;
}

then remove the generic type argument at line 18.

Contributor guide