C# 使用AccountController的依赖项注入时出现的问题
我正在清理和使用MVC5EF、Identity、Unity的旧应用程序。我很难弄清楚如何为AccountController注册DI。在 在下面的例子中,我改变了 从下面的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
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;
}