Signalr 是否可以使用自定义解析程序而不是hubname属性来解析信号器集线器?

Signalr 是否可以使用自定义解析程序而不是hubname属性来解析信号器集线器?,signalr,ioc-container,signalr-hub,Signalr,Ioc Container,Signalr Hub,我所有的SignalRhub都有自己的服务接口,这在客户端用于类型安全调用;ie不再通过字符串引用方法 无论如何,在这个设置中,我必须为所有具有接口名称的集线器添加一个HubName属性。甚至可以通过这些接口来解析集线器 我确实尝试用Ninject解析器替换GlobalHost和HubConfiguration对象中的解析器,但它似乎从未为集线器本身调用已解析的解析器 以下是一个集线器示例: [HubName("IFoobarService")] public class FoobarHub :

我所有的SignalRhub都有自己的服务接口,这在客户端用于类型安全调用;ie不再通过字符串引用方法

无论如何,在这个设置中,我必须为所有具有接口名称的集线器添加一个HubName属性。甚至可以通过这些接口来解析集线器

我确实尝试用Ninject解析器替换GlobalHost和HubConfiguration对象中的解析器,但它似乎从未为集线器本身调用已解析的解析器

以下是一个集线器示例:

[HubName("IFoobarService")]
public class FoobarHub : Hub, IFoobarService
{
    public void Baz(BazDto dto)
    {
        Clients.Others.Baz(dto);
    }
}
}

下面是我用来尝试用Ninject绑定集线器的代码 Bind(x=>x.FromThisAssembly() .SelectAllClasses() .继承自()
.BindAllInterfaces())

我认为使用HubName属性是最好的选择

您可以提供自己的IHubDescriptorProvider,并将其注册到SignalR的DependencyResolver,但我不推荐使用它

您可以在此处查看默认IHubDescriptorProvider实现:

请注意以下代码行:

var hubDescriptors=类型
.选择(类型=>新建HUB描述符
{
NameSpecified=(type.GetHubAttributeName()!=null),
Name=type.GetHubName(),
轮毂类型=类型
});
Type.GetHubName()在此处作为扩展方法实现:

您可以使用自己的IHubDescriptorProvider实现来替换ReflectedHubDescriptorProvider,该实现调用您自己的GetHubName方法,但我认为这太过分了


再一次,我认为使用HubName属性是您最好的选择。

提供我自己的HubDescriptorProvider会有任何不利之处吗?如果您在实施ReflectedHubDescriptorProvider更改后升级SignalR,除非您手动修补自定义IHubDescriptorProvider,否则您的应用程序不会利用ReflectedHubDescriptorProvider的修复/改进。好的,也许我会尝试Ninject示例使用的相同方法并继承该类,以便它可以退回到默认用法。谢谢你的帮助。