ASP.Net MVC 区域未选择注册类型

ASP.Net MVC Area not picking registered types

我正在开发一个 ASP.Net 应用程序,其中定义了几个 MVC Areas。当我尝试在 Area 内的控制器上使用依赖注入时,出现以下错误。

No parameterless constructor defined for this object.

我正在使用 Unity 容器,注册的依赖项似乎没有进入 MVC Area

设置在 global.asax.cs 中非常典型:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(MyConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

为了在 MVC 区域控制器中注入依赖项,我是否缺少其他步骤?

附加信息

这里是区域注册class:

public class MyAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "MyArea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "MyArea_default",
                "MyArea/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

统一容器:

     public static class MyConfig{

     public static IUnityContainer dependencyResolver { get; set; }

        public static void Register(HttpConfiguration config)
        {
            // Create Unity container
            var container = new UnityContainer();

            // Register service types
            container.RegisterType<ISomeService, SomeService>();
            // omitted for brevity

            // Create unity resolver
            config.DependencyResolver = new UnityResolver(container);

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            dependencyResolver = container;
}

区域管理员:

private ISomeServce SomeServce;

public LabController(ISomeServce someServce)
{
  SomeServce = someServce;
}

Web API 和 MVC 是两个完全不同的东西。您的问题最初是说您使用的是 MVC,但您的 DI 配置仅适用于 Web API.

MVC(和区域)的配置

根据 Dependency Injection Tutorial on MSDN,您遗漏了一个重要的 DI 设置 - 即,您的 Application_Start 方法没有设置 MVC 以使用 DI。仅设置为配置 DI for Web API.

您需要实现(或找到基于)IControllerFactoryIDependencyResolver 的实现并在应用程序启动时设置它以注入控制器依赖项。

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory(container));

// Or...

DependencyResolver.SetResolver(new MyDependencyResolver(container));