Asp.net web api AutoFac和WebApi,仍在寻找无参数构造函数

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

我的WebApi项目中有以下类,RegisterContainer()方法从Global.ASAX类调用。我正在我的api控制器中注入服务。问题是它;正在引发异常,但未得到实例化更正。它说没有找到无参数控制器。知道我的代码有什么问题吗

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