Asp.Net动态接口中属性注入未生效的问题解决
在ASP.NETCore动态接口中,属性注入未生效,原因是控制器由MVC框架直接实例化,仅支持构造函数注入。通过调用AddControllersAsServices()方法,使控制器由依赖注入容器创建,从而启用Autofac属性注入,解决延迟服务提供程序为null的问题。此方法适用于动态接口场景。
遇到一个挺典型的场景:在 ASP.NET Core 中,动态生成的 API 接口(比如那些继承了 IApplicationService 后自动转换为接口的 Service)在 Swagger 里调用原生 Controller 没问题,但一旦走动态接口,就报 LazyServiceProvider 为 null 的错误。容器用的是 Autofac,所有服务也都注册了,可属性注入偏偏不生效——这问题其实就卡在控制器实例的创建方式上。
先看一眼抽象类 ApplicationService 的代码:它继承了 IApplicationService 和 IDynamicApi,并且通过 [Autowired] 标注了 LazyServiceProvider 属性,意图用属性注入来实现懒加载。下面的 ObjectMapper、CurrentUser、PermissionChecker 也都通过 LazyServiceProvider 来获取,逻辑上没问题。

问题出在哪儿呢?
关键在于 ASP.NET Core 默认的控制器实例化方式。如果不做特殊配置,MVC 框架会直接用 ActivatorUtilities.CreateInstance 来创建控制器,这种方式只支持构造函数注入,根本不认属性注入(比如 [Autowired])。而 Autofac 等第三方容器的属性注入、拦截器等高级功能,只有在控制器实例由 DI 容器创建时才会生效。
解决方法其实就一行配置:
builder.Services.AddControllers()
.AddControllersAsServices(); // 这很重要,确保控制器由DI容器解析

AddControllersAsServices() 的作用很直接:
- 把所有控制器类注册到依赖注入容器中
- 确保控制器实例由 DI 容器创建,而不是由 MVC 框架直接实例化
这样一来,Autofac 就能接管控制器的创建过程,属性注入自然也就生效了。
加与不加的区别
不加 AddControllersAsServices()
- 创建方式:MVC 框架直接使用
ActivatorUtilities.CreateInstance创建控制器实例,只支持构造函数注入,不支持属性注入。 - 生命周期:每个请求都会创建新的控制器实例,生命周期完全由 MVC 框架管理。
- 限制:无法使用 Autofac 等第三方容器的高级功能(如属性注入),也无法自定义控制器的解析过程。
加 AddControllersAsServices()
- 创建方式:控制器实例由 DI 容器创建,支持完整的 DI 功能,包括构造函数注入和属性注入。
- 优势:可以使用第三方容器(如 Autofac)的所有功能,支持属性注入,可以自定义控制器的生命周期,还能在控制器解析前后执行自定义逻辑。
- 生命周期:默认仍然是每个请求创建新实例(Transient),但可以通过注册时指定来改变生命周期(比如改为 Scoped 或 Singleton)。
一句话总结:如果你在动态接口中用了属性注入,并且容器是 Autofac,那 AddControllersAsServices() 就是必须的。少了这一行,属性注入就不会执行,LazyServiceProvider 自然是 null。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













