C# 使用AccountController的依赖项注入时出现的问题

C# 使用AccountController的依赖项注入时出现的问题,c#,asp.net-mvc,unity-container,identity,C#,Asp.net Mvc,Unity Container,Identity,我正在清理和使用MVC5EF、Identity、Unity的旧应用程序。我很难弄清楚如何为AccountController注册DI。在 在下面的例子中,我改变了 从下面的 public AccountController() { } 对此 public AccountController(IDateTimeService dateTimeService, ILeagueLogic leagueLogic) { _dateTimeService = dateTime

我正在清理和使用MVC5EF、Identity、Unity的旧应用程序。我很难弄清楚如何为AccountController注册DI。在 在下面的例子中,我改变了 从下面的

      public AccountController()
    { }
对此

public AccountController(IDateTimeService dateTimeService, ILeagueLogic leagueLogic)
{
    _dateTimeService = dateTimeService;
    _leagueLogic = leagueLogic;
}
在完整控制器中,我有以下内容

  public class AccountController : Controller
{
    private ApplicationUserManager _userManager;
    private IDateTimeService _dateTimeService;
    private ILeagueLogic _leagueLogic;

         [InjectionConstructor] <-- Nailed it
    public AccountController(IDateTimeService dateTimeService, ILeagueLogic leagueLogic)
    {
        _dateTimeService = dateTimeService;
        _leagueLogic = leagueLogic;
    }

    public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
    {
        UserManager = userManager;
        SignInManager = signInManager;
    }

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

  private ApplicationSignInManager _signInManager;
    public ApplicationSignInManager SignInManager
    {
        get
        {
            return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
        }
        private set { _signInManager = value; }
    }


    //
    // GET: /Account/Login
    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }
公共类AccountController:控制器
{
私有应用程序用户管理器\u用户管理器;
私有IDateTimeService dateTimeService;
私人ILeagueLogic(联盟逻辑);
[注入构造函数]最后一行

container.RegisterType使用
new AccountController()
构造函数创建
AccountController
实例

类型注册应如下所示:

    container.RegisterType<AccountController>(
               new InjectionConstructor(
                 container.Resolve< IDateTimeService>(), 
                 container.Resolve< IDateTimeService >()));
最后一行

container.RegisterType使用
new AccountController()
构造函数创建
AccountController
实例

类型注册应如下所示:

    container.RegisterType<AccountController>(
               new InjectionConstructor(
                 container.Resolve< IDateTimeService>(), 
                 container.Resolve< IDateTimeService >()));

我之前尝试过这样的事情,但我得到(dateTimeService,leagueLogic)在当前上下文中不存在。哦,我明白了(很久没有接触Unity;)。请尝试完全删除AccountController注册,此处不需要命名参数(除非您的AccountController中有多个构造函数)这里有两个构造函数。这可能是问题的一部分。我注释掉了原始构造函数。`//public AccountController(ApplicationUserManager用户管理器,ApplicationSignInManager signInManager管理器)//{//{//userManager=userManager;//signInManager=signInManager;//}'您可以用
[InjectionConstructor]
属性来装饰新的一个。我以前尝试过这样的东西,但我得到的(dateTimeService,leagueLogic)在当前上下文中不存在。哦,我明白了(很久没有接触Unity;)。请尝试完全删除AccountController注册,这里不需要命名参数(除非您的AccountController中有多个构造函数)有2个构造函数。这可能是问题的一部分。我注释掉了原始构造函数。`//public AccountController(ApplicationUserManager用户管理器、ApplicationSignInManager signInManager管理器)//{//UserManager=UserManager;//SignInManager=SignInManager;//}'您可以使用
[InjectionConstructor]
属性来修饰新的
[InjectionConstructor]
public AccountController(IDateTimeService dateTimeService, ILeagueLogic leagueLogic)
{
    _dateTimeService = dateTimeService;
    _leagueLogic = leagueLogic;
}