带有 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 包:
- Autofac.WebApi2 3.4.0
- Autofac 3.5.2
- Microsoft.Data.Edm 5.6.4
- Microsoft.AspNet.WebApi 5.2.3
- Microsoft.Data.OData 5.6.4
背景信息:在 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.
在一个简单的 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 包:
- Autofac.WebApi2 3.4.0
- Autofac 3.5.2
- Microsoft.Data.Edm 5.6.4
- Microsoft.AspNet.WebApi 5.2.3
- Microsoft.Data.OData 5.6.4
背景信息:在 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.