Signalr 信号器IAssemblyLocator覆盖未触发

Signalr 信号器IAssemblyLocator覆盖未触发,signalr,signalr-hub,Signalr,Signalr Hub,我有一个简单的应用程序,它使用了几个集线器,一些在同一个项目中,另一个在另一个类库中,并且一切都很好。现在,我想尝试加载一个在运行时使用CSharpCodeProvider.compileasemblyfromsource创建的集线器,并让我的客户端与该集线器通信。它没有显示在/signalr/hubs/中 作为我努力工作的几件事情之一,我正在尝试使用自定义iAssemblyCator,如下所述: 但据我所知,我的getAssemblys()代码没有被调用。这是我的Global.asax.cs

我有一个简单的应用程序,它使用了几个集线器,一些在同一个项目中,另一个在另一个类库中,并且一切都很好。现在,我想尝试加载一个在运行时使用CSharpCodeProvider.compileasemblyfromsource创建的集线器,并让我的客户端与该集线器通信。它没有显示在/signalr/hubs/中

作为我努力工作的几件事情之一,我正在尝试使用自定义iAssemblyCator,如下所述:

但据我所知,我的getAssemblys()代码没有被调用。这是我的Global.asax.cs:

protected void Application_Start()
{
    GlobalHost.DependencyResolver.Register(typeof(IAssemblyLocator), () => new AssemblyLocator());

    var config = new HubConfiguration
    {
        EnableCrossDomain = true
    };

    RouteTable.Routes.MapHubs(config);

    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}
和自定义iAssemblyCator:

public class AssemblyLocator : IAssemblyLocator
{
    public IList< Assembly > GetAssemblies()
    {
        throw new Exception("I will break stuff");

        IList<Assembly> allAsms = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();

        foreach( Assembly asm in HubFactory.HubAssemblies )
        {
            allAsms.Add( asm );
        }

        return allAsms;
    }
}
公共类AssemblyLocator:IAssemblyLocator
{
公共IListGetAssemblies()
{
抛出新的异常(“我将打破东西”);
IList allAsms=BuildManager.GetReferencedAssemblys().Cast().ToList();
foreach(HubFactory.hubAssembly中的装配asm)
{
添加(asm);
}
回信;
}
}
正如您所看到的,我要做的第一件事就是抛出一个异常,只是为了证明这个代码正在被调用,但它不会被抛出。有了这段代码,我的应用程序继续正常工作,我的页面/客户端仍然可以向集线器发送消息

在后台,我希望几个单独的数据源在同一个网页上工作,使用一个连接,使用在运行时而不是编译时创建的集线器。因此,我需要能够在运行时创建并加载一个集线器,并将其显示在/signalr/hubs/中。我非常确定我在运行时创建的hub是正常的——我已经将生成的代码放入一个常规的.cs文件中,并在编译时包含它,然后它在/signalr/hubs中显示为正常。由于共享连接,似乎无法使用具有一个集线器的组。我应该能够使用GetHubContext(string)找到运行时创建的集线器


欢迎所有想法

MapHubs实际上替换了默认的解析器。试着改变一下顺序

var config = new HubConfiguration
{
    EnableCrossDomain = true
};

RouteTable.Routes.MapHubs(config);

GlobalHost.DependencyResolver.Register(typeof(IAssemblyLocator), () => new AssemblyLocator());