Asp.net web api AutoFac和WebApi,仍在寻找无参数构造函数
我的WebApi项目中有以下类,RegisterContainer()方法从Global.ASAX类调用。我正在我的api控制器中注入服务。问题是它;正在引发异常,但未得到实例化更正。它说没有找到无参数控制器。知道我的代码有什么问题吗Asp.net web api AutoFac和WebApi,仍在寻找无参数构造函数,asp.net-web-api,autofac,Asp.net Web Api,Autofac,我的WebApi项目中有以下类,RegisterContainer()方法从Global.ASAX类调用。我正在我的api控制器中注入服务。问题是它;正在引发异常,但未得到实例化更正。它说没有找到无参数控制器。知道我的代码有什么问题吗 public class IocConfig { #region Public Methods and Operators /// <summary> /// Adds dependencies into the co
public class IocConfig
{
#region Public Methods and Operators
/// <summary>
/// Adds dependencies into the container
/// </summary>
/// <returns></returns>
public static void RegisterContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
RegisterModules(builder);
RegisterControllers(builder);
}
#endregion
#region Methods
private static void RegisterControllers(ContainerBuilder builder)
{
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
}
private static void RegisterDependencyResolver(IContainer container, ContainerBuilder builder)
{
IDependencyResolver resolver = new AutofacWebApiDependencyResolver(container);
DependencyResolver.SetResolver(resolver);
}
private static void RegisterModules(ContainerBuilder builder)
{
builder.RegisterModule(new DomainModule());
builder.RegisterModule(new RepositoryModule());
builder.RegisterModule(new ServiceFacadeModule());
builder.RegisterModule(new MappingModule());
}
#endregion
}
您正在尝试在容器生成后注册模块 你需要移动电话
RegisterModules(builder);
在使用builder.Build()创建容器之前
:
在更新的代码中,您现在缺少两件事:
- 向注册器Api控制器注册Api控制器
- 设置AutofacWebApiDependencyResolver
var builder = new Autofac.ContainerBuilder();
builder.RegisterControllers(typeof(WebApiApplication).Assembly).PropertiesAutowired();
builder.RegisterApiControllers(typeof(WebApiApplication).Assembly).PropertiesAutowired();
builder.RegisterModule(new RepositoryModule());
builder.RegisterModule(new ServiceFacadeModule());
builder.RegisterModule(new RepositoryModule());
builder.RegisterModule(new MappingModule());
builder.RegisterModule(new DomainModule());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
您似乎正在注册MVC 根据Autofac WebAPI集成,您必须在启动时执行以下操作:
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
var config = GlobalConfiguration.Configuration;
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
请记住,您需要安装WebAPI集成包:
Install-Package Autofac.WebApi
它仍然说,确保在同一个项目/程序集中有一个无参数构造函数,或者有一个从
ApiController
派生的IocConfig
类和控制器类吗?还有一个可能是不必要/未使用的方法RegisterDependencyResolver(IContainer容器,ContainerBuilder)
。。。确保您只调用了注册容器。注册容器请查看更新的帖子。我已经摆脱了Ioc类,直接向Global.Asax添加了代码。请喝一杯look@InTheWorldOfCodingApplications请参阅我的最新答案。当您从Ioc类移动到Global.Asax
的代码时,您已经删除了一些必要的配置步骤。
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
var container = builder.Build();
var config = GlobalConfiguration.Configuration;
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Install-Package Autofac.WebApi