加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – SignalR无法从外部程序集中找到集线器

发布时间:2020-12-16 09:39:24 所属栏目:asp.Net 来源:网络整理
导读:我编写小型Web应用程序,并希望使用signalr来创建推送通知,但是当我从其他程序集加载集线器时,什么都不会发生. 这是我的程序集定位器,来自引用我的asp.net mvc项目的其他库 public class HubAssemblyLocator : IAssemblyLocator { public IListAssembly GetAs
我编写小型Web应用程序,并希望使用signalr来创建推送通知,但是当我从其他程序集加载集线器时,什么都不会发生.

这是我的程序集定位器,来自引用我的asp.net mvc项目的其他库

public class HubAssemblyLocator : IAssemblyLocator {

    public IList<Assembly> GetAssemblies() {


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

        var executingDirectory = AppDomain.CurrentDomain.BaseDirectory;

        var assemblyFiles = Directory.EnumerateFiles( executingDirectory,"Application" );

        foreach ( var assemblyFile in assemblyFiles.Where( _ => _.EndsWith( ".dll" ) ) ) {

            var asm = Assembly.LoadFile( assemblyFile );

            if ( asm.GetTypes().Any( _ => _.BaseType == typeof( Hub ) ) ) {
                allAsms.Add( asm );
            }
        }

        return allAsms;
    }
}

这是我在Global.asax中的ApplicationStart事件

public class MvcApplication : System.Web.HttpApplication {

    protected void Application_Start() {

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register( GlobalConfiguration.Configuration );
        FilterConfig.RegisterGlobalFilters( GlobalFilters.Filters );
        RouteConfig.RegisterRoutes( RouteTable.Routes );
        InitializeRepositories.Initialize();



        var servicesPre = GlobalHost.DependencyResolver.GetServices( typeof( IAssemblyLocator ) );

        RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true});

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

        var servicesPost = GlobalHost.DependencyResolver.GetServices(typeof (IAssemblyLocator));
    }
}

在这个问题上这个问题解决了,但在我的情况下是行不通的.

SignalR IAssemblyLocator not fired

在我的情况下,程序集定位器没有执行.

更新:只需在区域和路线注册之前注册集线器.

解决方法

应该在RegisterRoutes()之前调用RouteTable.Routes.MapHubs(),但是在您的Application_Start中调用它.您也可以在调用MapHubs()之后注册HubAssemblyLocator,但逻辑上它应该在之前.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读