4
我正在编写小型Web应用程序,并且希望使用signalr来创建推送通知,但是当我从其他程序集加载集线器时,什么都不会发生。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;
}
}
这里我ApplicationStart事件在Global.asax中
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
而且在我的处境组件定位件未执行。
更新:在区域和路线注册之前注册枢纽。
谢谢你的回答,但主要问题是HubAssemblyLocator没有解雇=) – Sam