首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC5依赖注入问题

MVC5依赖注入问题
EN

Stack Overflow用户
提问于 2015-02-20 16:15:58
回答 1查看 991关注 0票数 0

我使用洋葱架构方法使用MVC5创建了一个应用程序。该解决方案包含3个项目(核心、基础设施和UI)。UI包含Web控制器和MVC控制器。我遇到的问题是依赖注入。我安装了Unity.MVC5 & Unity.WebApi。我在App_Start下的App_Start如下所示:

代码语言:javascript
复制
public static void RegisterComponents()
    {
        var container = new UnityContainer();

        container.RegisterType<IPricingService, PricingService>();

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
    }

我的global.asax看起来是这样的:

代码语言:javascript
复制
protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        System.Web.Http.GlobalConfiguration.Configure(WebApiConfig.Register);

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        UnityConfig.RegisterComponents();

    }

为了测试我的控制器,我定义了我的家庭控制器如下:

代码语言:javascript
复制
private readonly IPricingService _pricingService;

    public HomeController(IPricingService PricingService)
    {
        this._pricingService = PricingService;
    }

在运行主页时,我得到了没有为这个对象定义的无参数构造函数.

现在,转到另一个测试场景,我创建了一个web控制器,如下所示:

代码语言:javascript
复制
private readonly IPricingService _pricingService;

    public TestApiController(IPricingService PricingService)
    {
        this._pricingService = PricingService;
    }

测试web会生成以下错误:

试图创建类型为“TextApiController”的控制器时出错。确保控制器有一个无参数的公共构造函数。“,"exceptionType":"System.InvalidOperationException”。

不知道我错过了什么。请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2015-02-20 19:06:48

您应该将Unity.WebApi.DependencyResolver注入到WebApi配置而不是GlobalConfiguration.Configuration.DependencyResolver中的中。

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
{
    var container = new UnityContainer();
    container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager());
    config.DependencyResolver = new UnityResolver(container);

    // Other Web API configuration not shown.
}

还需要在BeginScope方法如本MSDN文章所示中实现子容器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28633456

复制
相关文章

相似问题

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