检索调用方法的名称空间的名称

本文关键字:空间 调用 方法 检索 | 更新日期: 2023-09-27 18:03:59

如何获得调用当前公共方法的方法的名称空间?

我知道如何找到一个调用方法的名称,但这是逃避我。

所以这里有一个我需要的c#自动化测试解决方案的类比:

在" examplessolution .sln"中有两个cs文件。这些类库中的每一个都有一个名称空间。命名空间1和命名空间A。

两个命名空间都有一个类和一个方法。

命名空间1包含方法"LogIn",命名空间A包含方法"MyTest"。

MyTest在开始时调用LogIn来执行一个登录过程。在LogIn内部,代码应该确定调用方法MyTest的名称空间。因此,命名空间A的字符串名称应该作为"A"返回给命名空间1下的LogIn方法。

我想要这样做的原因是,解决方案是结构化的,有价值的组件信息存在,可以用来确定一些变量的值,而不必在每次调用LogIn方法时将这些值作为参数传递给它,这是数百次。

检索调用方法的名称空间的名称

查看来电者信息

通过Caller Info属性可以获取被叫的信息方法的调用者。您可以获取文件路径的源代码,在源代码中的行号,以及调用方的成员名。这些信息有助于跟踪、调试和创建诊断工具。

假设您的文件夹结构映射到您的命名空间,您可以使用CallerFilePathAttribute来获得命名空间,而不必使用Reflection来获得它。

您也可以使用http://msdn.microsoft.com/en-us/library/4ce0ktkk(v=vs.110).aspx获取当前堆栈信息。您可以使用"GetFrame"在调用堆栈中导航到您想要返回的距离,并使用这些结果来获取有关调用者的信息,包括其"类型",然后是"命名空间"。

你不应该检查调用方法的命名空间。正如Jon Skeet曾经说过的:

仅仅使用包含调用方法的类的名称空间听起来很脆弱,对测试不友好,通常是一个坏主意。

相反,您可以将数据传递到您的方法中。把它包含在一个对象中可以让你保持代码的干净、快速和可测试性。
public interface IContext
{
    string SomeVariable { get; }
    int SomethingElse { get; }
}
public void LogIn(string user, IContext loginContext) { ... }

public class MyTestContext : IContext
{
    private MyTestContext() { }
    // TODO make this a singleton?
    public static MyTestContext Instance { get { return new MyTestContext(); } }
    public string SomeVariable { get { return "abc"; } }
    public int SomethingElse { get { return 2; } }
}