c# - VS2012注册和依赖注入(inject)中的SignalR 2.0

标签 c# signalr signalr-hub

我能够像这样使用自己的 DI 使用 SignalR 1.13:

//Funq container
GlobalHost.DependencyResolver = new FunqDependencyResolver(container); 
RouteTable.Routes.MapHubs();

现在有了新版本 2.0,我被卡住了。
using Microsoft.Owin;
using Owin;
//SignalR 2.0 no longer uses RouteTable.Routes.MapHubs();
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat { 
    public class Startup {
        public void Configuration(IAppBuilder app) { app.MapSignalR(); }
    }
}

(VS2013 截图中的新 SignalR 2.0 设置)

enter image description here

首先,它是来自 here 的 VS2013 的屏幕。 .我的 VS2012 Pro 没有 Create New ...-> OWIN Startup 类。我手写了一个。但是现在如何调用新的启动类来替换旧的MapHub()功能?

其次,我使用的是运行 Web 项目其余部分的 DI。我现在如何将 signalR 注册到我的 DI?

编辑------------------------------

多一点的问题。
我在 Global.asax.cs->Application_Start() 中创建了我的 DI 容器,但 SignalR Startup.cs->Configuration() 是自动创建和调用的。如何将我的 DI 容器传递给 SignalR Startup?

Global.asax.cs(应用程序启动时自动运行)
protected void Application_Start(object sender, EventArgs e)
{
    var appHost = new AppHost(); //DI init
    appHost.Init();
    var container = appHost.Container; //DI container here
    var resolver = new FunqDependencyResolver(container);
}

SignalRStarter.cs(这也会在应用启动时自动运行)
[assembly: OwinStartup(typeof(WebApp.SignalRStarter))]
namespace WebApp {
    public class SignalRStarter {
        public FunqDependencyResolver FunqDependencyResolver { get; set; }
        public bool EnableDetailedErrors { get; set; }

        public void Configuration(IAppBuilder app) {
            app.MapSignalR(new HubConfiguration() {
                EnableDetailedErrors = EnableDetailedErrors,
                Resolver = FunqDependencyResolver
            });
        }
    }
}

最佳答案

您仍然可以像在 1.1.3 中一样设置依赖关系解析器。然而,更好的方法(做同样的事情,只是更清洁)是:

app.MapSignalR(new HubConfiguration
{
    Resolver = new FunqDependencyResolver(container)
});

注: app.MapSignalR()是新的RouteTable.Routes.MapHubs()对于 SignalR 2.0.0+,这意味着你不应该再做 RouteTable.Routes.MapHubs() .

现在对于您关于在 VS2012 中没有 Owin Startup 类的问题,没关系!只需创建一个新的空白类并将代码复制并粘贴到您的类中。无需其他设置。

关于c# - VS2012注册和依赖注入(inject)中的SignalR 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626244/

相关文章:

c# - SignalR:如何在页面重新加载时停止创建新连接

c# - 什么是 ADO.NET?

c# - Moq 可以模拟 HubConnection 但 RhinoMocks 不能?

c# - 有可能 signalR 客户端网络连接另一台 PC 上的服务器吗?

c# - SignalR - 非常初学者

asp.net-mvc - Asp.net SignalR 在 Azure 中部署时无法工作

c# - 使用 Lightswitch、Silverlight 和自定义控件

c# - List<T>.Item 属性如何为 O(1)?打字错误?

c# - 在 dll 中配置 log4net 日志记录

c# - 信号R "Error during start request. Stopping the connection."