0

我想知道从何处发送请求(函数调用)检测的最佳方法是什么

含义:我的项目是这样的:

  • 引擎
  • Web 项目(使用引擎)
  • 测试项目-控制台项目(使用引擎)

现在我希望在运行测试项目时不会在函数中执行某些代码。

我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何原因要检测请求是否来自网络项目......

谢谢!!

奥廖尔。

4

4 回答 4

3

如果被调用的代码应该根据调用来自 Web 项目还是控制台项目而表现不同,则代码不应位于共享库中。它确实属于各自的项目。

于 2012-04-18T18:33:42.400 回答
2

您可以检查它HttpContext.Current不为空。但是,@JustinNiessner 的建议仍然适用。

于 2012-04-18T19:03:59.197 回答
2

使用 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 == "...")
于 2012-04-18T19:17:50.517 回答
0

您可以使用StackFrame对象访问堆栈跟踪,并查看调用您的前一个方法是什么。通过使用该方法,您可以轻松找到相应的项目。来自较早的帖子

StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();

尽管我应该警告您,那是您应该仅用于娱乐/调试时使用的东西。

于 2012-04-18T18:37:41.090 回答