MVC 5 和 Unity IoC 中的 AccountController
AccountController in MVC 5 and Unity IoC
我创建了一个新的 ASP.NET MVC 5 项目,其中包含个人用户身份验证。然后我继续将 Unity IoC 安装为一个包,并通过在 UnityConfig.cs
:
中执行以下操作对其进行配置
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default);
container.RegisterType<AccountController>(new InjectionConstructor());
}
根据我通读的内容 Google,这应该考虑到 Unity 会选择具有最多参数的构造函数这一事实。我的 AccountController.cs
有以下两个构造函数。
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
{
UserManager = userManager;
SignInManager = signInManager;
}
但我仍然遇到问题。当我导航到 http://localhost:xxxx/account/login
时,我收到 404 错误 !
这是我的RouteConfig.cs
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "{controller}/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
正如我所怀疑的,问题出在你的路线上。
将路由想象成 c# 中的 switch case 语句。您遇到的问题是,每当第一条路线遇到 any 3 段路线时,它将 always 匹配。因此,任何正常的 /controller/action/id
都不会到达您的默认路线。
路线中需要有 1 个或多个约束 and/or 1 个或多个显式段,以确保它 在某些点不 匹配,或者你基本上做了一个无法到达的执行路径。
这是一个带有显式段的示例。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "Artist/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我创建了一个新的 ASP.NET MVC 5 项目,其中包含个人用户身份验证。然后我继续将 Unity IoC 安装为一个包,并通过在 UnityConfig.cs
:
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default);
container.RegisterType<AccountController>(new InjectionConstructor());
}
根据我通读的内容 Google,这应该考虑到 Unity 会选择具有最多参数的构造函数这一事实。我的 AccountController.cs
有以下两个构造函数。
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
{
UserManager = userManager;
SignInManager = signInManager;
}
但我仍然遇到问题。当我导航到 http://localhost:xxxx/account/login
时,我收到 404 错误 !
这是我的RouteConfig.cs
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "{controller}/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
正如我所怀疑的,问题出在你的路线上。
将路由想象成 c# 中的 switch case 语句。您遇到的问题是,每当第一条路线遇到 any 3 段路线时,它将 always 匹配。因此,任何正常的 /controller/action/id
都不会到达您的默认路线。
路线中需要有 1 个或多个约束 and/or 1 个或多个显式段,以确保它 在某些点不 匹配,或者你基本上做了一个无法到达的执行路径。
这是一个带有显式段的示例。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "Artist/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);