我想知道从何处发送请求(函数调用)检测的最佳方法是什么
含义:我的项目是这样的:
- 引擎
- Web 项目(使用引擎)
- 测试项目-控制台项目(使用引擎)
现在我希望在运行测试项目时不会在函数中执行某些代码。
我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何原因要检测请求是否来自网络项目......
谢谢!!
奥廖尔。
我想知道从何处发送请求(函数调用)检测的最佳方法是什么
含义:我的项目是这样的:
现在我希望在运行测试项目时不会在函数中执行某些代码。
我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何原因要检测请求是否来自网络项目......
谢谢!!
奥廖尔。
如果被调用的代码应该根据调用来自 Web 项目还是控制台项目而表现不同,则代码不应位于共享库中。它确实属于各自的项目。
您可以检查它HttpContext.Current
不为空。但是,@JustinNiessner 的建议仍然适用。
使用 TESTPROJECT 符号集和不带此符号的 Web 项目编译您的测试项目。然后由于ConditionalAttribute,仅当您的代码是从测试项目中调用时才会执行 SetIsFromTest() 方法(因此字段 IsFromTest 将设置为 true)。
static class Class1
{
static bool IsFromTest = false;
static Class1()
{
SetIsFromTest();
}
[Conditional("TESTPROJECT")]
public static void SetIsFromTest()
{
IsFromTest = true;
}
}
另一种选择是测试从您的共享库中调用程序集的名称。
if(System.Reflection.Assembly.GetCallingAssembly().FullName == "...")
您可以使用StackFrame对象访问堆栈跟踪,并查看调用您的前一个方法是什么。通过使用该方法,您可以轻松找到相应的项目。来自较早的帖子:
StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();
尽管我应该警告您,那是您应该仅用于娱乐/调试时使用的东西。