如何通过我的MVC应用程序传播自定义对象?

时间:2013-06-05 13:13:41

标签: c# asp.net-mvc concurrency webforms

假设我有一个类似于每个尝试访问我网站的用户的对象。 一种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上的

我看不到每个控件的任何扩展名,所以我怎样才能实现这种过程呢?我想摆脱在Session上存储元素。

1 个答案:

答案 0 :(得分:0)

如果我理解正确的问题,我想我在一个项目中做了类似的事情。 我有这样的事情:

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()