Настраивать:
Я написал мастер ASP.NET MVC, изначально основанный на мастере Стива Сандерсона (Pro ASP.NET MVC 2 Framework). Мой волшебник универсален и является мечтой.
Каждый шаг мастера - это действие.
Однако теперь я выпустил приложение, которое широко использует мастер. Очевидно, что приложение находится в режиме выпуска.
Класс WizardController ‹> - это базовый класс для всех моих мастеров. В нем есть метод OnActionExecuting, который, как я подозреваю, может решить мою проблему. Вопрос в том, как, а точнее пройти по стеку в нужном порядке, в чем проблема ...
Эта проблема:
Код в глубине WizardController использует:
var stackTrace = new StackTrace();
string actionName = stackTrace.GetFrame(n).GetMethod().Name
чтобы получить имя действия, которое вызвало этот код (где n - это кадр, который, как я знаю, является вызывающим действием ... то есть в режиме отладки). Это позволяет мне определить, на каком шаге / действии мастера я выполняю.
Это отлично работает в режиме отладки, но в режиме выпуска компилятор оптимизирует мой код. Таким образом, n может или не может представлять правильный фрейм в моем стеке.
Реальность такова, что в режиме выпуска иногда n не соответствует правильному кадру. А иногда бывает недостаточно. Иногда это моя проблема. Я хочу пуленепробиваемое решение.
Вопрос:
Так какая альтернатива использованию stacktrace ?? Я подозреваю, что могу использовать свой метод OnActionExecuting, чтобы получить имя действия, что мне и нужно, поскольку это имя определяет шаг в моем мастере.
Но как?
Забудьте быть или не быть. Как? Вот в чем вопрос.