如何获取调用当前公共方法的方法的命名空间?
我知道如何找到一个调用方法的名字,但这是我的意思。
所以这里是我在C#中使用自动化测试解决方案所需要的类比:
“ExampleSolution.sln”中有两个cs文件。每个类库都有一个名称空间。命名空间“1”和命名空间“A”。
两个命名空间都有一个类和一个方法。
命名空间1包含方法“LogIn”,而命名空间A包含方法“MyTest”。
MyTest在开始时调用LogIn来执行登录过程。在LogIn内部,代码应该确定调用方法MyTest的命名空间。因此,名称空间A的字符串名称应作为“A”返回到命名空间1下的LogIn方法。
我想要这个的原因是解决方案的结构是存在有价值的组件信息,可用于确定一些变量的值,而不必每次都将这些值作为参数传递给LogIn方法叫,这是几百次。
非常感谢任何帮助。
答案 0 :(得分:1)
通过使用“来电者信息”属性,您可以获取有关该信息的信息 调用方法。您可以获取源代码的文件路径 源代码中的行号以及调用者的成员名称。 此信息有助于跟踪,调试和创建 诊断工具。
假设您的文件夹结构映射到您的命名空间,您可以使用CallerFilePathAttribute
来获取命名空间,而无需使用Reflection来获取它。
答案 1 :(得分:0)
您还可以使用http://msdn.microsoft.com/en-us/library/4ce0ktkk(v=vs.110).aspx获取当前堆栈信息。您可以使用" GetFrame"导航到您想要在调用堆栈中返回的距离,并使用这些结果获取有关调用者的信息,包括其"类型",然后它& #39; s"命名空间"。
答案 2 :(得分:0)
您不应该尝试检查调用方法的命名空间。正如Jon Skeet once said:
只使用包含调用方法的类的命名空间听起来很脆弱,对测试不友好,而且通常是一个坏主意。
相反,您可以将数据传递给您的方法。将它保存在一个对象中可以让你保持代码干净,快速和可测试。
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; } }
}