带有 OData v3 和 Web 的 Autofac Api 2.2

Autofac with OData v3 and Web Api 2.2

在一个简单的 Web api 应用程序中,我有一个 OData v3 控制器和一个 Web Api 控制器都使用 Autofac。在我让 Odata 工作后,我的 Web Api 注入停止工作:

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

我已经对 autofac 进行了一百次故障排除,这一次让我很困惑。我已经确认两个依赖项都可以解决。

安装到 Visual Studio 2012 中的 Nuget 包:

背景信息:在 Visual Studio 2.12 中,我从 Web Api 2.2 开始,然后添加了 Odata v1-3。此时,两个控制器都工作了。当我安装 Autofac 时,我开始在两个控制器响应中收到一条消息,指出缺少对 Microsoft.Odata.Core 6.11 的引用。在我安装 Microsoft.Odata.Core 6.11 和 5.6.4 之后,Odata 开始工作,但是 Web Api 坏了。

我必须使用 Odata v3 才能获得 Excel 支持。我知道 Odata v3 正在运行,因为 Excel 仍然能够提取数据。

ContainerConfig.cs

var builder = new ContainerBuilder();

var config = GlobalConfiguration.Configuration;

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
   .AsImplementedInterfaces();

builder.RegisterWebApiFilterProvider(config);

var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

Web Api 2.2 控制器:

public class UsersController : ApiController
{
    private readonly IUserService _users;

    UsersController(IUserService users)
    {
        _users = users;
    }        
}

Odata 控制器:

public class InsightsController : ODataController
{
    private readonly IInsightService _insightService;

    public InsightsController(IInsightService insightService)
    {
        _insightService = insightService;
    }        
}

呵呵。它有助于使构造函数 public.