MVC 5和Unity IoC中的AccountController

时间:2015-02-11 23:38:13

标签: c# dependency-injection asp.net-mvc-5 asp.net-mvc-routing unity-container

我已经创建了一个新的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 }
);

1 个答案:

答案 0 :(得分:1)

我怀疑,问题在于您的路线。

将路径视为c#中的switch case语句。您遇到的问题是,只要第一条路线遇到任何 3段路线,它就会始终匹配。因此,任何正常的/controller/action/id都不会达到您的默认路线。

路线中需要有一个或多个约束和/或一个或多个显式段,以确保在某些时候没有匹配,或者您已基本完成无法访问的执行路径。

以下是显式段的示例。

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 }
);