【发布时间】:2017-08-15 19:53:17
【问题描述】:
在 ASP.NET MVC 5 的新项目模板中,有 2 个构造函数用于 Account 和 Manage 控制器。
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
我正在初始化构造函数中的一些属性,我一开始很困惑该使用哪一个。单步执行代码时,我看到只调用了第一个默认构造函数。
我想知道第二个控制器是否只是依赖注入的占位符,我目前没有使用它。或者,当不使用 DI 时,Identity 是否会在后台出于其他目的调用它? (我是根据整个框架计算的,UserManager 和 SignInManager 都已经在 Startup 中构建,因此不需要在第二个构造函数中重新创建它们。
【问题讨论】:
-
我只使用过第二个参数化控制器。我什至不包括默认构造函数。是的,服务是在 Startup.cs 中注册的,并没有在这里创建,它们只是在这里注入。
-
嗯,我还不相信..实际上我只是在玩它,看到“没有为此对象定义无参数构造函数”。当我没有包含它时出错。
-
我刚刚对其进行了测试,要么,要么声明的构造函数,要么没有声明的构造函数似乎工作完全相同。不知道为什么我之前收到此错误,无法复制它。
-
我刚刚阅读了这篇有用的帖子:stackoverflow.com/questions/26671358/…。虽然我很担心作者说“MVC 如何决定使用哪个构造函数尚不清楚......”。在实例化其他属性时,为了安全起见,在两个构造函数中都这样做可能是有益的。不合理,但我没有找到足够的文档来支持。 asp.net/mvc/overview/older-versions/…。或者做 DI。
标签: c# asp.net asp.net-mvc asp.net-identity