我怎样才能确定哪个对象创建了这个对象

时间:2012-05-17 03:03:04

标签: c# oop unit-testing vsto

是否有一种简单的方法来获取创建此对象的对象。我知道它总是属于某种对象类型,但我希望在构造函数中使用像this这样的简单关键字。

可能不必要的背景:

我一直在为PowerPoint中的这个加载项创建单元测试。有时您需要向上一级并查看父对象以获取位置,字体大小等信息。我试图避免这种情况直到现在。

我想我可以编辑我的“Mocks”并添加另一个构造函数,在那里我将创建每个对象的对象传递给它的子对象;但是,我觉得那里有更好的解决方案。哦,这些模拟部分实现了由 Visual Studios Tools for Office 提供的接口,其部分接口是Parent属性getter / setter。如果我没有实现一个方法,它只会在调用该方法时抛出一个新的NotImplementedException

1 个答案:

答案 0 :(得分:5)

您可以从堆栈中获取调用方法,并从中推断出类名:

http://www.csharp-examples.net/reflection-calling-method-name/

然而,这在某种意义上是脆弱的,如果你在中间有一个层,你在堆栈中关心的调用者的位置会发生变化。但是,如果将逻辑放在实用方法或扩展方法中,那么随着时间的推移就不难发展。

查询调用堆栈并不是一个非常快的操作,但对于单元测试,它可能是可以接受的。