【问题标题】:2 constructors in Asp.Net Identity AccountControllerAsp.Net Identity AccountController 中的 2 个构造函数
【发布时间】: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 中注册的,并没有在这里创建,它们只是在这里注入
  • 嗯,我还不相信..实际上我只是在玩它,看到“没有为此对象定义无参数构造函数”。当我没有包含它时出错。
  • 这是一个高度可信的来源示例:github.com/IdentityServer/IdentityServer4.Quickstart.UI/blob/…
  • 我刚刚对其进行了测试,要么,要么声明的构造函数,要么没有声明的构造函数似乎工作完全相同。不知道为什么我之前收到此错误,无法复制它。
  • 我刚刚阅读了这篇有用的帖子:stackoverflow.com/questions/26671358/…。虽然我很担心作者说“MVC 如何决定使用哪个构造函数尚不清楚......”。在实例化其他属性时,为了安全起见,在两个构造函数中都这样做可能是有益的。不合理,但我没有找到足够的文档来支持。 asp.net/mvc/overview/older-versions/…。或者做 DI。

标签: c# asp.net asp.net-mvc asp.net-identity


【解决方案1】:

第一个构造函数不会让第二个构造函数覆盖它。我不确定第一个是否对 Asp.Net Identity 有一些内部用途,但他们肯定出于某种原因想要保留它,而不是让它被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多