Unity IoC未正确注册类型

问题描述 投票:0回答:1

我有一个众所周知的问题,我的Web API抱怨我的控制器没有无参数构造函数。我已经浏览过很多页面和问题,但似乎无法找到问题。

我使用Nuget命令Install-Package Unity.WebAPI安装了Unity。 UnityConfig已正确创建。

这是我的UnityConfig文件:

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();

        container.RegisterType<IImportHeadService, ImportHeadService>();
        container.RegisterType<IImportDetailService, ImportDetailService>();
        container.RegisterType<ICurrencyService, CurrencyService>();
        container.RegisterType<ISupplierService, SupplierService>();
        container.RegisterType<IKPIService, KPIService>();

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

然后我在我的UnityConfig文件中注册了Global.asax,如下所示:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        UnityConfig.RegisterComponents();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

最后,这是我的ImportController,这是我试图通过提琴手调用:

public class ImportController : ApiController
{
    private IImportHeadService _importHeadService;
    private IImportDetailService _importDetailService;

    public ImportController(IImportHeadService importHeadService, IImportDetailService importDetailService)
    {
        _importHeadService = importHeadService;
        _importDetailService = importDetailService;
    }

    [HttpGet, Route("api/Import/Info")]
    public HttpResponseMessage GetInfo()
    {
        return Request.CreateResponse(HttpStatusCode.OK, "Import Tracker v1.0 - Import Controller");
    }
}

正如您所看到的,此时它是一个非常简单的控制器,但是我收到以下错误:

An error occurred when trying to create a controller of type 'ImportController'. Make sure that the controller has a parameterless public constructor.

asp.net-web-api dependency-injection inversion-of-control unity-container
1个回答
0
投票

好的,毕竟我有点傻了。我的服务在其构造函数中有一个用于上下文的参数。一旦我将上下文添加到Unity配置中。这一切都奏效了。

© www.soinside.com 2019 - 2024. All rights reserved.