有一个场景,其中希望有一个公共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)
这是从设计角度来看是否受到限制,能够在基本接口中保留一些常见操作会很好。请建议。
谢谢你的时间!。
答案 0 :(得分:1)
这是SignalR Hub<T>
实施中的一个错误。正如您所发现的那样,不支持派生接口。
没有具体原因为什么不接受基本接口方法。这只是一种疏忽。我可以肯定地说,因为I wrote the feature :(。
与此同时,要解决此问题,您需要将所有客户端方法放在单个界面中。我知道这远非理想。
您可以关注the bug report for this on GitHub。目前,该错误没有分配里程碑。请随意对此问题发表评论,以表明修复此错误对您很重要。这可以帮助进行分类。