我正在开发一个MVC 2中的Web应用程序,它为所有其他控制器使用基本控制器,以减少控制器初始化到一个地方。基本控制器包含菜单,当前用户等属性。以下是代码:
public class BaseController : Controller
{
private Common.MenuHierarchy _menu;
private User _currentUser;
internal NavMenuViewModel Menu(string pageId)
{
bool isGuest = this.CurrentUser.GroupProfileId == Constant.SecurityGroupProfile.Public;
if (this._menu == null)
{
this._menu = CreateMenu();
}
}
internal User CurrentUser
{
get
{
if (this._currentUser == null)
{
this._currentUser = CreateUser();
}
return this._currentUser;
}
}
}
所有其他控制器派生自BaseController。例如,
public class HomeController : BaseController
{
...
}
public ActionResult Index()
{
// Display home page
...
}
我注意到在定向到Home索引之后,_currentUser属性已经初始化。但如果我在里面设置点数突破,它就不会止步于此。我想知道何时初始化基本控制器。感谢。
答案 0 :(得分:2)
当构建Home控制器时,它从基本控制器CTOR开始,_currentUser
正在初始化,之后HomeController CTOR正在进行。它没有在吸气剂中停止的原因是,没有人得到CurrentUser
。初始化与getter分开。
答案 1 :(得分:1)
实际上,在调用HomeController构造函数时,它实际上已被初始化。 BaseClass构造函数首先被调用然后派生类构造函数。所以在你的情况下它是BaseController构造函数然后是HomeController构造函数。虽然你没有在BaseController中定义构造函数,但它仍然在做它。所以回答你的问题在创建HomeController时初始化BaseController。
更新:
如果您想知道何时调用操作和其他属性,请尝试将其添加到方法或属性中:
System.Diagnostics.Debug.WriteLine("This will be displayed in output window");
在调试时,您可以看到正在调用的内容以及调用顺序。 这可以帮助您了解何时初始化CurrentUser。