Razor MVC, где разместить глобальные переменные, которые доступны через главную страницу, partiview и view?

Здравствуйте, Бритва MVC Гуру:

Вопрос новичка.

Фон. У меня есть пользовательский IIdentity, который устанавливается в HttpModule, прежде чем он попадает в контроллер и представления. Чтобы использовать это, я должен сделать

   MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
   MyComplexUser user = myIdentity.User;
   //user.name //user.location //user.username  //etc

Проблема в том, что я использую объект в разных местах, таких как

мастер макетНекоторые вложенные макеты подуровняНекоторые частичные взглядыНекоторые взгляды

Это действительно зависит от того, какие свойства объекта «MyComplexUser» нужны представлениям.

В настоящее время, в представлениях, я должен сделать это действительно сложное приведение, чтобы добраться до свойства. Например, если я хочу «имя» пользователя, мне нужно сделать

@ (((MyComplexUser) (((MyIdentity) ((GenericPrincipal) context.User) .Identity) .user)). Имя)

Я полагаю, я мог бы поместить его в контроллеры, а затем заполнить ViewBag свойством ViewBag.MyUser, но затем

Я не люблю использовать ViewBag. Я предпочитаю строго типизированные объектыЕсли я использую строго типизированный объект («MyUser») для представлений, то я должен популярно использовать все эти модели со свойством «MyUser». Чувствует себя немного грязным? Поскольку мне нравится держать свои модели в чистоте и быть точным в отношении представлений, с которыми они связаны. Кроме того, это становится излишне повторяющимся.В таких местах, как master_layout.cshtml или частичные просмотры, как вы получаете доступ к «MyUser», если я помещаю их в контроллер?Использовать RenderAction и создавать частичные представления для каждого свойства пользователя - это перебор?

Благодарю. Опять же, я новичок в MVC 4, любое предложение очень ценит это.

Ответы на вопрос(1)

Ваш ответ на вопрос