2013-10-28 3 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

첫째, 그것은 here에서 VS2013에서 화면입니다. 내 VS2012 Pro에는 Create New ...-> OWIN Startup 클래스가 없습니다. 필자는 손으로 작성했습니다. 그러나 이제는 예전의 MapHub() 함수를 대체 할 새로운 시작 클래스를 어떻게 호출합니까?

두 번째로, 나머지 웹 프로젝트를 실행하는 DI를 사용하고있었습니다. 내 DI에 signalR을 어떻게 등록합니까?

편집 --------------------------------------------

조금 더 질문드립니다. Global.asax.cs-> Application_Start()에서 DI 컨테이너를 생성하지만 SignalR Startup.cs-> Configuration()이 자동으로 생성되어 호출됩니다. DI 컨테이너를 SignalR Startup으로 전달하려면 어떻게합니까? 당신은 여전히 ​​의존성 해결을 설정할 수 있습니다

[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

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 (응용 프로그램이 시작될 때이 자동 실행) 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 클래스가 없다는 것에 대한 질문은 Ok입니다. 새로운 빈 클래스를 만들고 클래스에 코드를 복사하십시오. 다른 설정은 필요하지 않습니다.

+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

은 내가 CustomHubActivator에서 허브를 해결와, 내 허브에서 매개 변수로 아무것도 삽입 할 수, SignalR 내 웹 응용 프로그램 모두에 대해 컨테이너를 공유했다.