私は小さな 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 が起動されない
私の状況では、アセンブリロケータは実行されません。
更新: エリアとルートを登録する前にハブを登録するだけです。