У меня проблема с отражением. Мне нужно найти тип, который создает экземпляр статического члена. Мой код выглядит так:
private class SimpleTemplate : PageTemplate
{
internal static readonly IPageProperty NameProperty =
PropertyRepository.Register("Name");
}
PropertyRepository — это хранилище свойств (очевидно). Он отслеживает все свойства, которые были зарегистрированы с использованием системы типов, которую я создаю.
Чтобы сделать это успешно, мне нужно отслеживать все свойства, а также тип, для которого они определены. В противном случае, если определены два свойства с одинаковыми именами, репозиторий свойств не сможет отличить их друг от друга.
Итак, что я хочу сделать, так это выяснить тип, который определяет NameProperty, и сохранить тип, а также имя. Как я могу это сделать?
Я хочу использовать строгую типизацию, т.е. не хочу отправлять тип в качестве аргумента в PropertyRepository.Register. Это было бы подвержено ошибкам, поскольку я не могу проверить правильность аргумента типа.
Решение, я полагаю, будет включать размышления. Есть ли способ использовать отражение, чтобы определить, какой тип вызывает статический метод? Статические свойства неявно создаются с помощью статического конструктора (который генерируется компилятором). Есть ли способ получить доступ к этому конструктору? Это кажется возможным, я просто не могу понять, как это сделать.
Другими словами: если метод A вызывает метод B, может ли B каким-либо образом сказать, что он был вызван из A с использованием отражения? Я думаю, что есть, но я не могу понять, как.
Кто-нибудь знает?
Редактировать: я просмотрел класс StackFrame, и, хотя он делает то, что мне нужно, он может быть ненадежным в производственном коде (а мне это нужно).