Вы повторно объявляете пункты меню в методе, в котором вы их создали, делая их локальными для этого метода и скрывая переменную экземпляра с тем же именем. Таким образом, в слушателе действия вы сравниваете источник со значением null.
Да. Кэшем является Прикладной уровень, и все пользователи находятся в том же приложении.
При необходимости в Кэше в расчете на пользователя, Вы могли бы использовать Сессию, но это - не совсем то же. Кэш позволяет платформе автоматически истекать объекты по-другому от сессии. Если Вы хотите поведение кэша на основе в расчете на пользователя (не обязательно хорошая идея), Вы могли встроить идентификатор пользователя в часть Вашего ключа для основного кэша.
Да это доступно всем пользователям на том же сервере. Однако при выполнении фермы это только будет доступно пользователям, которые используют сервер, в котором данные были добавлены для кэширования.
Кэш хорош для каждого AppDomain. Одно приложение, такое как веб-приложение, обычно остается в одном домене приложений. Но кеш не может быть разделен между чем-то вроде веб-приложения и веб-службы.