我刚刚使用模板使用Visual Studio 2015启动了ASP.NET 4.6(MVC 5.2.3),我看到的一件事是这段代码:
[Authorize]
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
{
UserManager = userManager;
SignInManager = signInManager;
}
}
正如你可以看到的默认构造函数,我们有第二个构造函数,它注入两个依赖项,我想知道,ASP.NET 4.6如何做到这一点?我没有看到任何IoC容器配置
答案 0 :(得分:0)
你是对的。 它没有。
默认情况下,该构造函数未被使用。相反,它在访问它们时实例化这些对象。
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
在这种情况下,如果对象不存在,则getter正在使用Null coalescing operator ??
来创建对象。
如果你愿意,MVC团队已经将那个构造函数放在那里供你使用。