创建动态中心上下文

Create dynamic hub context

我有 2 个项目。 C# 两者都使用 Hubs/SignalR。 它们都有相同的方法,所以我在外部 DLL 中创建了一个共享抽象 class。

所以...

项目#1:

public class HubServerService : SharedHubService, IHostedService
{
    public HubServerService(IHubContext<ServerUserHub> hubContext)
    {
        HubContext = hubContext;
    }
}

项目#2:

public class HubServerService : SharedHubService, IHostedService
{
    public HubServerService(IHubContext<ClientUserHub> hubContext)
    {
        HubContext = hubContext;
    }
}

我的摘要class:

public abstract class SharedHubService
{
    protected IHubContext<dynamic> HubContext;
}

这显然会引发 'dynamic' 的错误。我只是为了说明目的而放入它(并删除了所有焦点方法)。

我怎么能'overload'这个?

谢谢

注意:更改为拉娜提出的答案我得到这个:

如果我理解正确,你应该为你的 SharedHubService 使用模板

public class HubServerService : SharedHubService<ServerUserHub>, IHostedService
{
    public HubServerService(IHubContext<ServerUserHub> hubContext)
    {
        HubContext = hubContext;
    }
}

抽象 class 看起来像那样

public abstract class SharedHubService<T> where T : Microsoft.AspNetCore.SignalR.Hub
{
    protected IHubContext<T> HubContext;
}

啊我看到你的问题了...

试试下面的代码:

    public abstract class SharedHubService<THub> where THub : Hub
    {
        protected IHubContext<THub> HubContext;
    }

    public class ClientUserHub : Hub
    {

    }

    public class HubServerService : SharedHubService<ClientUserHub>, IHostedService
    {
        public HubServerService(IHubContext<ClientUserHub> hubContext)
        {
            HubContext = hubContext;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            throw new System.NotImplementedException();
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            throw new System.NotImplementedException();
        }
    }