C# MVC 5和Unity IoC中的AccountController

C# MVC 5和Unity IoC中的AccountController,c#,dependency-injection,asp.net-mvc-5,asp.net-mvc-routing,unity-container,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.FromMatchingInterf

我已经创建了一个新的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());
}
但我还是遇到了一些问题。当我导航到
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语句。您遇到的问题是,无论何时第一条管线遇到任何3段管线,它都将始终匹配。因此,任何正常的
/controller/action/id
都不会到达默认路径

路由中需要有1个或多个约束和/或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 }
);

您不需要(或者,您已经)设置
依赖解析程序
?e、 g.
DependencyResolver.SetResolver(新的UnityDependencyResolver(容器))已在
UnityMvcActivator.cs
此行
DependencyResolver.SetResolver(新的UnityDependencyResolver(容器))中完成获得404听起来更像是一个路由问题,而不是DI的问题。添加了路由代码,我也这么认为,但无法找出路由的任何错误!我本来想写的,但是因为复制/粘贴默认值而错过了。谢谢夜猫子:)
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 }
);