I have a question. I'm new to UnityContainer
. I use Unity for DI.
My ASP.NET MVC web app has an AccountController
(which was auto-generated by ASP.NET Identity) with the [Authorize]
attribute.
[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
}
View my complete code: My simple AccountController was auto-generated by VS - Identity
I try to inject constructor for AccountController
.
My code is in 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));
}
}
When I start to run the app, and call a method on the AccountController
, I ge tthis error message:
Value cannot be null. Parameter name: container
Please click below link to view the error message:
The Exception was thrown. Url's localhost:xxxxx/Account/Login
I found that when I removed [Authorize]
and [ValidateAntiForgeryToken]
attributes, everything worked well.
But when I added [Authorize]
or [ValidateAntiForgeryToken]
attributes, the exception was thrown.
Please help me to fix it.
I really appreciate it!
Aucun commentaire:
Enregistrer un commentaire