Как я могу распространять пользовательский объект через мое приложение MVC?

Допустим, у меня есть объект, который похож на каждого пользователя, который пытается получить доступ к моему сайту. Этакий объект Session Scope, который должен быть виден на каждом View/Model/Controller внутри всего моего "приложения".

Я хотел бы создать его, когда я вызываю страницу и заполняю ее данными, поступающими из моей собственной базы данных.

Чем при View (как пример) вызывать myObject.Title. В WebForms я делаю это, расширяя класс UserControl, такой как:

public class iUserControl : System.Web.UI.UserControl
{
    protected MyCurrentPage myCurrentPage;

    public iUserControl()
    {

    }

    protected override void OnLoad(EventArgs e)
    {
        myCurrentPage = new MyCurrentPageWrapper();
    }
}

чем, для каждого UserControl, что-то вроде этого:

public partial class context_pippo_MyOwnUserControl : iUserControl

в MVC я не вижу расширения для каждого элемента управления, так как я могу добиться такого рода процесса? Я хотел бы избавиться от хранения элементов на сессии.

1 ответ

Если я правильно понимаю вопрос, я думаю, что я сделал нечто подобное в одном проекте. У меня было что-то вроде этого:

public interface IControllerBaseService 
{
   IUserService UserService {get;set;}
   ShoppingMode ShoppingMode {get;set;}
   ...
}

public abstract class ControllerBase : Controller, IControllerBaseService 
{
   public IUserService UserService {get;set;} // this is injected by IoC
   public ShoppingMode ShoppingMode 
   {
      get 
      {
           return UserService.CurrentShoppingMode; // this uses injected instance to get value
      }
   ...
}

Пока я использую контейнер IoC для создания экземпляров контроллера, свойство UserService внедряется контейнером.

Теперь вы можете получить доступ к вашему интерфейсу из вида:

(IControllerBaseService)ViewContext.Controller

Чтобы иметь ярлыки для наиболее распространенных используемых свойств в IControllerBaseServiceУ меня было несколько методов расширения, что-то вроде этого:

 public static ShoppingMode CurrentShoppingMode(this HtmlHelper helper)
 {
     return ((IContollerBaseService)helper.ViewContext.Controller).ShoppingMode;
 }

Так что с точки зрения @Html.CurrentShoppingMode()

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