【问题标题】:UserManager helper method in the template AccountController模板 AccountController 中的 UserManager 辅助方法
【发布时间】:2014-05-28 02:31:11
【问题描述】:

模板 AccountController 类(VS 2013 Update 2)包含以下代码:

public class AccountController : Controller
{
    private ApplicationUserManager _userManager;

    public AccountController()
    {
    }

    public AccountController(ApplicationUserManager userManager)
    {
        UserManager = userManager;
    }

    public ApplicationUserManager UserManager {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

所以这里我们有一个漂亮的 ApplicationUserManager 辅助属性,它返回一个保存的 ApplicationUserManager 对象(如果调用了第二个构造函数),或者如果调用了无参数构造函数,则返回从 Owin 管道获取的 ApplicationUserManager。

问题:是否有任何东西调用了传入 ApplicationUserManager 对象的构造函数?

【问题讨论】:

    标签: asp.net-mvc asp.net-identity owin asp.net-identity-2


    【解决方案1】:

    默认情况下不是。但是,如果您开始使用 DI 框架,您可以设置 DI 框架以向控制器注入任何构造函数,在您的情况下是 ApplicationUserManager

    默认情况下,MVC 控制器需要 空构造函数 才能工作,但如果您使用 DI 框架,则可以将其配置为 注入 任何类型的构造函数。使用构造函数注入的优点是可以模拟每个依赖对象。

    如果你想使用任何 DI 框架,我应该推荐 AutoFac,https://code.google.com/p/autofac/wiki/MvcIntegration

    【讨论】:

    • 我也在想同样的事情。我在这两个 AccountController 构造函数中都设置了一些断点,看起来确实接受 userManager 实例的那个 在某些时候被某些东西调用了。有趣的是,我认为他们都在同一个请求中被调用,不确定到底发生了什么,但我觉得这很奇怪。 (如果记忆正确,现在无法实际验证这一点。)
    • 不可能使用上面的代码在同一个请求期间调用两个构造函数。只有在空构造函数中调用另一个构造函数时才会发生这种情况。
    猜你喜欢
    • 2023-03-03
    • 2015-05-31
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多