asp.net-web-api - AutoFac 与 Web Api,仍在寻找无参数构造函数

标签 asp.net-web-api autofac

我的 WebApi 项目中有以下类,并且从 Global.ASAX 类调用 RegisterContainer() 方法。我正在我的 api Controller 中注入(inject) Service。问题是它抛出异常并且没有得到实例化纠正。它说找不到无参数 Controller 。知道我的代码有什么问题

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
}

}

更新:

我已经更改了这一点,并且仅向 Global.Asax 添加了以下几行。

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        //IocConfig.RegisterContainer();
        //WebApiConfig.Register(GlobalConfiguration.Configuration);

        var builder = new Autofac.ContainerBuilder();
        builder.RegisterControllers(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));


    }

最佳答案

您正在尝试在容器构建后注册模块。

您需要转移调用

RegisterModules(builder);

使用 builder.Build() 创建容器之前:

RegisterModules(builder);
IContainer container = builder.Build();

在更新后的代码中,您现在缺少两件事:

  • 使用 RegisterApiControllers 注册您的 Api Controller
  • 设置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);

关于asp.net-web-api - AutoFac 与 Web Api,仍在寻找无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941112/

相关文章:

asp.net-mvc-3 - Autofac 未填充操作过滤器属性

asp.net-mvc-3 - ASP.NET MVC 3 应用程序的扩展?

c# - Ninject 在具有多个程序集的 WebApi 项目中抛出激活异常

asp.net - 通过 WebAPI 流式传输 SqlFileStream

c# - 使用 Autofac 的 RegisterGeneric 注入(inject) NLog

c# - 如何获取 Autofac for WebAPI2 的容器?

c# - AutoMock - 如何使用键控注册进行单元测试?

javascript - 在javascript中循环遍历angular js数组

asp.net - HTTP header Access-Control-Allow-Origin 中是否存在允许来源的最大数量?

c# - JsonConvert.DeserializeObject 上的 StackOverflowException