2009-08-07 6 views
1

私はFoo()と呼ばれるパブリック関数を持つ "Bar"というC#のクラスを持っているとします。実行元を特定する

Foo()関数の中で、Foo()がどこから実行されたのかを特定する手段がありますか?もっと正確には、.aspxファイルからFoo()が呼び出されたかどうかを調べたいと思います。このように<%Bar.Foo()%>とBar.Foo()の後ろのコードから。

私が質問する理由は、関数が.aspxファイル内で実行されたときに異なる動作をしたいということです。

EDIT:

、私は非常に長くもちろんのこと、説明するのは非常に困難であるので、私は、私は本当に私の問題の退屈な詳細に取得する必要はありません2つの異なる機能を使用することができます実現しています。それは私が苦労している独特な問題であることだけを知っています、そして、私はそれがどこに呼ばれたのかを知ることによって解決できることを知っています。

+1

なぜこのタスクに2つの異なる機能(またはその2つの機能を区別する引数)を使用しないのですか? –

+0

まあ私は2つの異なる機能を使用することができますが、私は本当に私の問題の長い細部に入りたいとは思わない。しかし、私はどこに呼び出されたのかを特定することで問題を解決できることを知っています。 – 7wp

答えて

2

「あなたの行動が違う」と言うとき。 (System.Web.dllへの参照を追加した後に)HttpContext.Currentをチェックすることがより良い考えになるかどうかは疑問です。

それ以外の場合は、スタックフレームの解析領域に入っています。良い考えではありません。

もちろん

、私は違いを処理するために、依存性注入のようなものを使用して、同じジョブのいずれかの方法を実行するためのコードをしたいと思います...

+0

私は文脈がどんな値であろうとわかりません。それは要求を表示しますが、要求がパイプラインのどの段階にあるのかわかりません。 – tvanfosson

+0

私は主に単純に 'null'と比較することについて話しています... –

+0

スタックフレームの解析が悪いという理由の1つは、非常に遅いということです。 –

0

それはスタックを調べることによって可能かもしれないが、私にはその非常に悪い匂いになります。 Decoratorパターンを使用してBarの動作を変更し、Webページから呼び出されたときに別のFoo()実装を与えることができます。例えば

、WebBarはバーを使用するのFooの異なる実装を持っていますが、あなたが望む別の計算を行い

<% new WebBar(Bar).Foo(); %> 

。これにより、Barクラスは「Web対応」でなくても、Webからの「Web」動作を取得する比較的簡単な方法が得られます。

一方、コードビハインドで実行したときに文字列を返し、ASPXで実行したときにレスポンスに書き込むだけの場合は、別のタグセットを使用してください。代わりに、問題がある

<% Bar.Foo(); %> 
0

<%= Bar.Foo() %> 

は、ASPXファイルが実際にあなたの.csファイルと同じファイルとコンパイル時designer.csファイルに変換されます。それらはすべて単一のランタイムクラスの抽象です。私はあなたがしようとしていることは、表示されている場合、それらを異なったフォーマットにすることだと思います。それがクラスの場合、ToStringまたはToStringを上書きする関数を作成することをお勧めします。

関連する問題