autoface - MVC控制器和Web Api控制器的依赖注入

本文关键字:控制器 依赖 注入 Api MVC autoface Web | 更新日期: 2023-09-27 18:16:43

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

  • 控制器
    • ProductController
  • Api
    • ProductController

这是我的bootstrapper方法:

        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"。确保控制器具有无参数公共构造函数。

我做错了什么?

autoface - MVC控制器和Web Api控制器的依赖注入

您没有设置Web API的GlobalConfiguration.Configuration.DependencyResolver;你只设置MVC的DependencyResolver

添加以下行:

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