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