什么控制器初始化功能做ASP.Net MVC4

时间:2015-09-16 12:07:52

标签: asp.net-mvc-4

我是MVC和学习的新手。我在这里放一些代码。所以先看看

public class HomeController : BaseController
    {
        private IProductRepository productRepository;
        private string strRouteValue;

        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            base.Initialize(requestContext);
            strRouteValue = this.ControllerContext.RouteData.Values["method"].ToString();
            this.productRepository = Factory.Create(strRouteValue);
        }

        [HttpGet]
        public ActionResult Index(int id)
        {            
            productRepository.Get(id);
            return View();
        }

        [HttpPost]
        public ActionResult Index(Product model)
        {
            productRepository.Add(model);            
            return View();
        }       
    }

Initialize函数的作用是什么?

每个人都必须说这是人们会初始化许多对象的地方,如果是这样的话我们也可以在控制器的构造函数中做到这一点。那么控制器初始化函数有什么特别之处呢?

控制器初始化函数和控制器构造函数有什么区别?

2 个答案:

答案 0 :(得分:8)

查看该方法的文档:MSDN: Controller.Initialize()

  

初始化在调用构造函数时可能无法使用的数据

     

此方法无法直接调用。覆盖此方法,以便在调用任何ActionResult方法之前提供其他处理任务,例如设置线程区域性或为TempData对象分配自定义提供程序。如果重写此方法,请调用基本控件的Initialize方法。

正如我在你之前关于MVC,依赖注入和控制器实例化的大约二十个问题中提出的建议:停止将糟糕的博客帖子和SO上的不相关答案拼凑起来。 购买一本体面的MVC书并从封面到封面阅读。然后用一本关于单元测试的书来做同样的事情。如果你继续这样做,你将永远无法彻底了解事物。

答案 1 :(得分:1)

实例化控制器和初始化控制器之间存在差异。实例化是一个.NET概念而不是MVC,因此每个类都使用默认构造函数自动实例化。因此,构造函数基本上是类的概念,而初始化是操作方法的概念。我们重写Initialize()方法,以便在调用任何ActionResult方法之前提供额外的处理任务,例如设置线程文化或分配TempData对象等....