SignalR Hub <t>实现对基础接口的支持</t>

时间:2014-10-21 13:37:09

标签: signalr signalr-hub

有一个场景,其中希望有一个公共Base接口,然后有派生接口,然后根据需要可以有默认的基本成员和派生的接口。 代码看起来像下面的

public interface IBaseClient
{
    Task MessageBroadCast(dynamic msg);
}

public interface IXXClient : IBaseClient
{
    Task XXX(YYY msg);      
    //Any Additional Client methods should go here
}

public abstract class BaseHub<T> : Hub<T> where T : class 
{
    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
    {
       // Do any logic here
        return base.OnDisconnected(stopCalled);
    }   
}
public class XXHub : BaseHub<IXXClient> 
{
  // Can Do a broadcast from here 
    // The below will work in a method and you see the MessageBroadCast with strongly typing
    Clients.All.XXX(msg);
    // Support for below is not present at least in the version I have or may be I'm missing something.
    Clients.All.MessageBroadCast(msg);
}

需要的问题或信息:在SignalR 2.1 Core中:获取一条错误消息,指出没有为MessageBroadCast提供IXXClient实现。

在运行时通过SignalR创建Type时,是否有任何特定原因导致未接收到Base Interface方法。具体在GenerateInterfaceImplementation(ModuleBuilder moduleBuilder)

这是从设计角度来看是否受到限制,能够在基本接口中保留一些常见操作会很好。请建议。

谢谢你的时间!。

1 个答案:

答案 0 :(得分:1)

这是SignalR Hub<T>实施中的一个错误。正如您所发现的那样,不支持派生接口。

没有具体原因为什么不接受基本接口方法。这只是一种疏忽。我可以肯定地说,因为I wrote the feature :(。

与此同时,要解决此问题,您需要将所有客户端方法放在单个界面中。我知道这远非理想。

您可以关注the bug report for this on GitHub。目前,该错误没有分配里程碑。请随意对此问题发表评论,以表明修复此错误对您很重要。这可以帮助进行分类。