Autofac依赖注入报错:控制器被要求必须存在无参数构造函数如何解决?
错误触发原因及修复方案
你的错误本质是MVC默认控制器激活器无法解析NameController的构造参数,回退到要求无参构造函数,触发MissingMethodException,具体是代码存在4个可触发该错误的问题:
Stuff类未实现IStuff接口:你注册了Stuff作为IStuff的实现,但类定义未显式继承IStuff,导致Autofac无法完成类型映射,解析IStuff实例失败。AutofacConfig.GetBuilder()方法缺少返回值:方法定义要求返回ContainerBuilder对象,但代码中没有添加return builder;语句,导致后续构建容器时拿到的是无效对象,依赖注册完全不生效。- 未在
Global.asax的Application_Start生命周期入口调用BuildContainer()方法:如果没有主动调用该方法,Autofac依赖解析器不会被注册到MVC框架,框架始终使用默认激活器要求控制器有无参构造。 Idb服务注册存在语法错误:builder.Register<Idb>(c => new db(...);缺少闭合的右括号,代码无法正常编译执行,即使其他配置正确也会导致Idb解析失败,连带Stuff、NameController解析链路全部失效。
修复后的Stuff类定义
public interface IStuff { NameModel GetNameModel(); } // 显式实现IStuff接口 public class Stuff : IStuff { private readonly Idb db; public Stuff(Idb db) { this.db = db; } public NameModel GetNameModel() { NameModel modelobject = new NameModel(); modelobject.info = "info"; return modelobject ; } }
修复后的AutofacConfig.cs
public static ContainerBuilder GetBuilder() { var builder = new ContainerBuilder(); // 补全注册的闭合括号,确保db初始化逻辑正确 builder.Register<Idb>(c => new db(/* 你的db构造参数 */)); builder.RegisterType<Stuff>().As<IStuff>(); // 新增返回builder语句 return builder; }
修复后的Global.asax.cs
// 在Application_Start中主动调用BuildContainer protected void Application_Start() { // 原有其他配置:AreaRegistration、FilterConfig、RouteConfig、BundleConfig 注册等 BuildContainer(); } private void BuildContainer() { var builder = AutofacConfig.GetBuilder(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

