次のように、独自の 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 セットアップ)
まずはこちらから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
});
}
}
}