Имам проблем с отражението. Трябва да намеря типа, който инстанцира статичен член. Моят код изглежда така:
private class SimpleTemplate : PageTemplate
{
internal static readonly IPageProperty NameProperty =
PropertyRepository.Register("Name");
}
PropertyRepository е хранилище на свойства (очевидно). Той следи всички свойства, които са били регистрирани с помощта на типовата система, която изграждам.
За да направя това успешно, трябва да следя всички свойства, но също и типа, на който са дефинирани. В противен случай, ако са дефинирани две свойства с едно и също име, хранилището на свойствата няма да може да ги различи.
И така, това, което искам да направя, е да открия типа, който дефинира NameProperty и да съхраня типа, както и името. Как мога да направя това?
Искам да използвам силно въвеждане, т.е. не искам да изпращам типа като аргумент на PropertyRepository.Register. Това би било податливо на грешки, тъй като не мога да потвърдя, че аргументът тип е правилен.
Предполагам, че решението ще включва размисъл. Има ли някакъв начин да се използва отражение, за да се определи кой тип извиква статичен метод? Статичните свойства се инстанциират имплицитно с помощта на статичен конструктор (който компилаторът генерира). Има ли начин да се справя с този конструктор? Това изглежда осъществимо, просто не мога да разбера как да го направя.
С други думи: Ако метод A извиква метод B, има ли начин B да разбере, че е извикан от A чрез отражение? Предполагам, че има, но не мога да разбера как.
Някой знае ли?
Редактиране: Разгледах класа StackFrame и въпреки че изглежда, че прави това, което искам, може да не е надежден в производствения код (и имам нужда от това).