如何解决带有授权属性的帐户控制器中的UNITY MVC容器捕获空值
我有一个问题。我是UnityContainer
的新手。我将Unity用于DI。
我的ASP.NET MVC Web应用程序具有一个AccountController
属性的[Authorize]
(由ASP.NET Identity自动生成)。
[Authorize]
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
[InjectionConstructor]
public AccountController() { }
public AccountController(ApplicationUserManager userManager,ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
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; }
}
[AllowAnonymous]
public ActionResult Login(string returnUrl) { ViewBag.returnUrl = returnUrl; return View(); }
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model)
{
//My code
return RedictToAction("Index","Home");
}
//Some Methods
}
查看我的完整代码:My simple AccountController was auto-generated by VS - Identity
我尝试为AccountController
注入构造函数。
我的代码在App_Start > UnityConfig.cs
中:
public static class UnityConfig
{
public static IUnityContainer Container;
public static void RegisterComponents()
{
var container = new UnityContainer();
//register all my components with the container here
container.RegisterType<IUserStore<ApplicationUser>,UserStore<ApplicationUser>>();
container.RegisterType<DbContext,ApplicationDbContext>(new PerRequestLifetimeManager());
container.RegisterType<UserManager<ApplicationUser>>();
container.RegisterType<ApplicationUserManager>();
container.RegisterType<AccountController>(new InjectionConstructor());
DependencyResolver.SetResolver(new Unity.AspNet.Mvc.UnityDependencyResolver(container));
}
}
当我开始运行应用程序并在AccountController
上调用方法时,会显示以下错误消息:
值不能为null。参数名称:容器
请单击下面的链接查看错误消息:
The Exception was thrown. Url's localhost:xxxxx/Account/Login
我发现删除[Authorize]
和[ValidateAntiForgeryToken]
属性后,一切正常。
但是当我添加[Authorize]
或[ValidateAntiForgeryToken]
属性时,就会引发异常。
请帮助我修复它。
我真的很感激!
解决方法
我找到了答案。
在Application_Start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
UnityConfig.RegisterComponents(); //<--- Incorrect
}
我调整了
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
UnityConfig.RegisterComponents(); //<========
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。