Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定执行的来源_C#_Asp.net - Fatal编程技术网

C# 确定执行的来源

C# 确定执行的来源,c#,asp.net,C#,Asp.net,假设我在C#中有一个名为“Bar”的类,其上有一个名为Foo()的公共函数 在Foo()函数中,有没有一种方法可以让我确定Foo()是从哪里执行的?更确切地说,我想知道Foo()是否是从.aspx文件调用的。与Bar.Foo()后面的代码相比,类似于此 我问这个问题的原因是,当函数在.aspx文件中执行时,我希望它的行为有所不同 编辑: 我意识到我可以使用两种不同的函数,我真的不想深入到问题的无聊细节,因为它很难解释,更不用说很长时间了。只要知道这是我正在努力解决的一个独特问题,我知道我可以通过

假设我在C#中有一个名为“Bar”的类,其上有一个名为Foo()的公共函数

在Foo()函数中,有没有一种方法可以让我确定Foo()是从哪里执行的?更确切地说,我想知道Foo()是否是从.aspx文件调用的。与Bar.Foo()后面的代码相比,类似于此

我问这个问题的原因是,当函数在.aspx文件中执行时,我希望它的行为有所不同

编辑:

我意识到我可以使用两种不同的函数,我真的不想深入到问题的无聊细节,因为它很难解释,更不用说很长时间了。只要知道这是我正在努力解决的一个独特问题,我知道我可以通过识别它的来源来解决它。

当你说“行为不同”;我想知道检查(在添加对
System.Web.dll
的引用之后)是否是一个更好的主意

否则,您将进入堆栈帧解析领域;这不是个好主意


当然,我希望代码以任何一种方式完成相同的工作,使用依赖项注入之类的方法来处理差异…

通过检查堆栈可能是可行的,但对我来说,这将是一种非常糟糕的气味。您可能希望使用该模式修改Bar的行为,在从网页调用时为其提供不同的Foo()实现

比如说,

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

其中,WebBar有一个不同的Foo实现,它使用Bar,但执行您希望的不同计算。这使您的Bar类不必具有“web感知”,但仍然为您提供了一种相对简单的方法来获取“web”行为

另一方面,如果您所追求的只是让它在代码隐藏中执行时返回一个字符串,并在ASPX中执行时写入响应,那么只需使用一组不同的标记即可

<%= Bar.Foo() %>

而不是

<% Bar.Foo(); %>


问题是,ASPX文件实际上在编译时转换为与.cs和designer.cs文件相同的文件。它们实际上都是单个运行时类的抽象。我想你要做的是,如果它们被显示出来,你要做的就是改变它们的格式。我建议你考虑为它创建一个函数,或者如果它是一个类,就要把ToStin叠加起来。

为什么不简单地使用两个不同的函数来完成这个任务(或者一个参数来区分这两个)?我意识到我可以使用两个不同的函数,但是我真的不想深入讨论我的问题。但是我知道我可以通过确定调用它的来源来解决我的问题。我不知道上下文是否有任何价值。它将向您显示请求,但我不知道该请求是否处于管道的哪个阶段。堆栈帧解析不好的一个原因是它非常慢。实际上,更好的原因是它很脆弱;你重构了吗?砰,你弄坏了。JIT决定内联一个方法?砰,它坏了。@Marc-我明白了,但他想让它在代码隐藏和标记中工作得不同。我认为在呈现页面时,上下文仍然存在(尽管我没有检查)。我可以看到这一点来区分控制台应用程序和web应用程序,但不是在预渲染和标记期间。