我能够像这样使用自己的 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 设置)
首先,它是来自 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/