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