2012-01-17 10 views
0

現在Global.asax内から実行中のコントローラにアクセスする方法はありますか?私は、コントローラのコンテキストにある場所にこのコードを動かすことができますが、私は集中型のポータブルそれを維持したいと思いGlobal.asax内の代理人からControllerContextへのアクセス

MyClass.RegisterComponents().When(IController => /* Some condition */) 

:私は似た構文を持つAPIを設計したいと思います

これまでのところ、コントローラを入手できませんでした。何か案は?

私はベースコントローラーを作成し、このベースクラスからすべてのコントローラーを拡張することを検討しましたが、このライブラリーをNuGet経由でインストールできるようにしたいと考えています。このため、私はこのアプローチをとることができません。

+0

'BaseController'を作成してそのコントローラを継承することはできません。ほとんどの相互作用はそれによって傍受される可能性があります。 – Eranga

+0

Global.asaxのどのイベントでこれをしたいですか?利用可能なHttpContextさえも存在しないイベントがいくつかあります。例えば、HttpContextを持たない 'Application_Start'の内部で統合モードで実行すると、コントローラとコントローラのコンテキストについて話すことさえできません。 –

+0

これはアプリケーションの起動用です。 –

答えて

0

解決策が見つかりました。非常に良いものではありませんが、私の問題を解決します。

David Ebboのブログ(http://blog.davidebbo.com/2011/02/register-your-http-modules-at-runtime.html)にあるアセンブリの起動方法を使用して、グローバルIActionFilterを登録します。

グローバルアクションフィルタは、要求ごとのコレクションである現在のHttpContext.Items []コレクションにアクションコンテキストを格納するだけです。

私はどこにでもコンテキストにアクセスできます。

0

あなたのglobal.asmxファイルでは、次の操作を行うことができます。

private void Application_BeginRequest(object sender, EventArgs e) 
    { 
     string controllerName = Request.RequestContext.RouteData.Values.Where(p => p.Key =="controller").FirstOrDefault(p => p.Key); 

    } 
+0

これはコンテキストだけでなくコントローラ名を私に与えます。 –

+0

申し訳ありません私はあなたの質問の見出しに注意を払っていませんでした。これは役立つはずです:http://forums.asp.net/t/1505777.aspx/1 –

関連する問題