Autofac - 依赖注入MVC​​控制器和Web Api控制器

时间:2015-10-08 14:10:11

标签: c# asp.net-mvc asp.net-web-api dependency-injection autofac

我在同一个项目中有MVC控制器(在Controllers文件夹中)和Web Api控制器(在Api文件夹中):这是文件夹结构:

  • 控制器
    • ProductController的
  • 阿比
    • ProductController的

这是我的引导程序方法:

        private static void SetAutofacContainer()
        {
            var builder = new ContainerBuilder();
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterControllers(Assembly.GetExecutingAssembly());
            //builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerRequest();
            builder.RegisterType<DbFactory>().As<IDbFactory>().InstancePerRequest();

            // Repositories
            builder.RegisterAssemblyTypes(typeof(ProductRepository).Assembly)
                .Where(t => t.Name.EndsWith("Repository"))
                .AsImplementedInterfaces().InstancePerRequest();

            IContainer container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }

我无法将存储库注入我的Web Api控制器。这是我得到的例外:

  

尝试创建类型的控制器时发生错误   'ProductController的'。确保控制器具有无参数   公共建设者。

我做错了什么?

1 个答案:

答案 0 :(得分:9)

您尚未设置Web API的GlobalConfiguration.Configuration.DependencyResolver;你只设置MVC的DependencyResolver

添加以下行:

GlobalConfiguration.Configuration.DependencyResolver =
    new AutofacWebApiDependencyResolver(container);