2013-10-28 53 views
1

我能夠用自己的DI與SignalR 1.13的工作是這樣的:SignalR 2.0在VS2012登記和依賴注入

//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

首先,它是從VS2013一個屏幕從here。我的VS2012 Pro沒有Create New ...-> OWIN Startup class.I手寫一個。但是現在如何調用新的啓動類來取代舊的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 
      }); 
     } 
    } 
} 
+0

請參閱http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects-to-20 – davidfowl

回答

9

,您仍然可以設置依賴解析器就像你在1.1.3中做的一樣。但更好的方法(做同樣的事情,只是清潔劑)是做:

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

注:app.MapSignalR()是SignalR 2.0.0+新RouteTable.Routes.MapHubs(),這意味着你應該不再做RouteTable.Routes.MapHubs()

現在對於您在VS2012中沒有Owin Startup類的問題,沒關係!只需創建一個新的空白類並複製ñ代碼粘貼到您的班級。不需要其他設置。

+0

+1。我不知道app.MapSignalR() –

+0

@ N.Taylor Mullen,謝謝。那裏有更多的問題。我在Global.asax.cs-> Application_Start()中創建了我的DI容器,但SignalR Startup.cs-> Configuration()是自動創建和調用的。我如何將DI容器傳遞給SignalR Startup?(請參閱上面的源代碼編輯) – Tom

+1

您是指GlobalHost? –

2

我在不改變HubConfiguration的情況下使用了下面的這個方法。

Using an existing IoC Container in SignalR 2.0

我共享的容器用於SignalR和我的web應用程序,與來自CustomHubActivator解決中心,我可以注入任何東西在我的樞紐參數。