В C#, когда я вызываю метод, я хочу иметь возможность определить, сможет ли он (или потенциально) вызвать что-то с определенным атрибутом.Есть ли способ обнаружить, что будет вызвано методом?
Например, когда вызывается вызов TheProgram.Run() get, я хочу знать, что он вызовет MyClass.DoTheWork, у которого есть атрибут [IsRegistered], который вызывает частный метод FormatTheResult(), который также имеет attribute [IsRegistered].
Я размышлял об этом некоторое время и не могу представить, как это можно достичь. Я думаю, что-то вроде инверсии трассировки стека или регистрации компонентов с атрибутом или аспектом или, возможно, опираясь на MEF.
Возможно ли это?
Это обнаружение может произойти во время компиляции или времени выполнения, но в идеале до того, как будет выполнен метод с атрибутом.
Я точно не знаю, как, но это, безусловно, возможно. Например, в анализе кода используется так называемая «интроспекция».Если ваша цель - провести проверку какого-либо теста (а модульные тесты недействительны), посмотрите на создание настраиваемого правила анализа кода. Кроме того, Mocking frameworks позволяет найти и заменить вызовы, хотя я не уверен, как они точно работают или что их метод делает так. –