首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未选择注册类型的ASP.Net MVC区域

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

Stack Overflow用户
提问于 2016-01-05 18:39:51
回答 1查看 818关注 0票数 1

我正在开发一个ASP.Net应用程序,其中定义了几个MVC Areas。当我试图在Area中使用依赖注入控制器时,我会得到下面的错误。

代码语言:javascript
复制
No parameterless constructor defined for this object.

我使用的是一个统一容器,它看起来注册的依赖项并没有将它添加到MVC Area中。

安装程序在global.asax.cs中非常典型

代码语言:javascript
复制
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(MyConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

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

更多信息

这是地区注册班:

代码语言:javascript
复制
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 }
            );
        }
    }

统一容器:

代码语言:javascript
复制
     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;
}

区域主计长:

代码语言:javascript
复制
private ISomeServce SomeServce;

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 18:55:11

Web和MVC是两件完全不同的事情。您最初的问题是您正在使用MVC,但您的DI配置只针对Web。

MVC (和区域)的配置

根据MSDN依赖注入教程,您缺少DI设置的一个重要部分--即您的Application_Start方法没有设置MVC来使用DI。它仅用于为Web配置DI。

您需要实现(或基于) IControllerFactory或IDependencyResolver,并在应用程序启动时将其设置为注入控制器依赖项。

代码语言:javascript
复制
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory(container));

// Or...

DependencyResolver.SetResolver(new MyDependencyResolver(container));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34618963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档