c# - UNITY MVC 容器在具有授权属性的帐户控制器中捕获 NULL 异常
问题描述
我有个问题。我是新手UnityContainer
。我使用 Unity 进行 DI。
我的 ASP.NET MVC Web 应用程序有一个AccountController
(由 ASP.NET Identity 自动生成)具有该[Authorize]
属性。
[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
}
查看我的完整代码:我的简单 AccountController 由 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
,我收到以下错误消息:
值不能为空。参数名称:容器
请点击以下链接查看错误信息:
异常被抛出。Url 的 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);
}
推荐阅读
- python - 我无法使用 python 字典中的键获取值
- localization - SnipCart 网站:“$localize”出现在 Google 搜索结果片段中
- sql - 如何在带有 where 子句的 sql 查询中获取最新的日期时间记录?
- android - 成功登录android后从sqlite获取与用户相关的数据
- laravel - 在 laravel 中排除的 VerifyCsrfToken 路由中注销用户
- android - Google Play 商店拒绝应用更新但测试了错误的 APK
- ida - 在 IDA 工具栏中找不到插件菜单
- python - 您如何使用 python 识别(但不修复)csv 文件中的空值或重复值?
- c# - 如何用意大利语编写日期并将意大利语设置为 ASP.Net C# 中的默认语言
- reactjs - 禁止传播道具 - React Dropzone