【问题标题】:How ASP.NET 4.6 injects dependencies?ASP.NET 4.6 如何注入依赖项?
【发布时间】:2015-08-13 12:25:39
【问题描述】:

我刚刚使用模板使用 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 容器配置

【问题讨论】:

  • 它们只是特定于该页面的参数。它们本身不是 MVC 或 Asp.Net 的一部分。我有一个用于订购梨的页面的控制器。 PearController() 和 PearController(ShoppingCart curShopCart)

标签: asp.net asp.net-mvc


【解决方案1】:

你是对的。 没有。

默认情况下,不使用该构造函数。相反,它会在访问这些对象时对其进行实例化。

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 团队已将构造函数放在那里供您根据需要使用。

【讨论】:

猜你喜欢
  • 2015-11-11
  • 2011-08-01
  • 2014-07-11
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2010-10-27
相关资源
最近更新 更多