Nope, you can't do what you seem to want.
Looking again at your example from the comment to José:
public class A { public SomeType v get {new SomeType(); } }
public class B { public A a {get {new A(); }} }
public class C { public B b {get {new B(); }} }
public class Test {
public void Foo(object prop) {
if(typeof(SomeType).IsAssignableFrom(prop.GetType()))
};
public Test() {
Foo(new C().b.a.v);
}
}
When Foo is called it is passed an instance of SomeType, created in the getter of the v property of A.
That instance has
absolutely no knowledge of who created it.
The information available to Foo is exactly the same as for:
Foo(new SomeType());
Each of the property getters in your "chain" creates a new instance of an object and returns it
before the next property getter is called so even StackTrace will not help.
The call "chain" in this case is sequential, not nested, so there's nothing useful in the stack.