Обоснование IReadOnlySessionState

Я только что реализовал обработчик, который использует IReadOnlySessionState, и мне было интересно, зачем нужен этот маркерный интерфейс. (Я понимаю, что это необходимо для доступа к переменным Session, мой вопрос - почему это происходит с точки зрения дизайнера фреймворка)? Я думаю, что это так, что обработчики могут быть настолько бережливыми, насколько это возможно, требуя от них "подписаться", если они хотят использовать состояние сеанса, но мне интересно, возможно, я что-то упускаю.

2 ответа

Решение

Да, AFAIK, вы правы. И то и другое IReadOnlySessionState а также IRequiresSessionState являются маркерными интерфейсами, которые защищают вас от того, что ваш обработчик становится тяжелее и медленнее.

Разница между ними заключается только в статусе записи сеанса.

Ты прав. IReadOnlySessionState Интерфейс просто дает вам возможность использовать объект Context.Session.

Но если вы реализуете IRequiresSessionState Интерфейс, ваш обработчик устанавливает эксклюзивную блокировку на текущий сеанс, поэтому все другие запросы (которые хотят использовать объект Session) в контексте того же сеанса будут ждать, пока ваш обработчик не завершит работу.

IReadOnlySessionState не очень хорошее имя, потому что на самом деле вы можете изменить SessionState в таких обработчиках, и вы не получите исключения. Вы просто берете на себя ответственность за сопутствующие вам проблемы.

Другие вопросы по тегам