1

次のように、独自の 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
            });
        }
    }
}
4

2 に答える 2

2

HubConfiguration を変更せずに、以下のこのアプローチを使用しました。

SignalR 2.0 で既存の IoC コンテナーを使用する

SignalR と Web アプリの両方のコンテナーを共有し、CustomHubActivator からハブを解決して、ハブにパラメーターとして何でも挿入できます。

于 2014-05-26T04:45:30.913 に答える