Asp.net mvc 4 ASP.Net MVC4具有什么控制器初始化功能

Asp.net mvc 4 ASP.Net MVC4具有什么控制器初始化功能,asp.net-mvc-4,Asp.net Mvc 4,我是MVC和学习方面的新手。我在这里放了一些代码。所以先看 public class HomeController : BaseController { private IProductRepository productRepository; private string strRouteValue; protected override void Initialize(System.Web.Routing.RequestContext

我是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();
        }       
    }
初始化函数的作用是什么

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


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

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

检查该方法的文档:

初始化调用构造函数时可能不可用的数据

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


正如我在之前20多个关于MVC、依赖注入和控制器实例化的问题上所建议的那样:不要把拙劣博客文章的建议和不相关的答案拼凑在一起买一本像样的MVC书,从头读到尾。然后在一本关于单元测试的书上也这样做。如果您继续这样做,您将永远无法彻底了解情况。

我可以设置线程区域性,从控制器构造函数分配临时数据吗?如果可能的话,为什么会有人重写initialize()函数?我只是想知道controller initialize()函数和controller构造函数之间的区别是什么?如果你知道答案,请与我分享。我知道答案,并将其以粗体显示。@CodeCaster请告诉我一本好书,我可以阅读它,以便更好地了解MVC、依赖注入和其他好东西。我将一个问题发布到@CodeCaster的评论部分。请查看并回答(如果可能)。初始化调用构造函数时可能不可用的数据。例如,如果要设置会话,则不能在构造函数中进行设置,因为HttpContext.session在该构造函数中始终为null。而您可以使用初始化方法来实现。另一个例子是,您想知道是否使用HttpContext.request.IsAuthenticated对请求进行了身份验证,但是您不能在构造函数中进行身份验证,因为HttpContext在那里总是为null。我希望现在已经很清楚了。