Autofac 找不到构造函数
示例信息
在类型 'MyApp.MyComponent' 上找不到构造函数,使用的查找器是 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'。
这意味着 Autofac 尝试通过反射创建组件,但用于定位组件构造函数的服务表示该组件没有可用的构造函数。
在示例消息中,我们可以看到:
- 正在创建的类是
MyApp.MyComponent
。 MyApp.MyComponent
类正在被Autofac.Core.Activators.Reflection.DefaultConstructorFinder
查找构造函数。Autofac.Core.Activators.Reflection.DefaultConstructorFinder
返回了 0 个可用构造函数。
故障排除
这种情况通常发生在 Autofac 注册了一个没有公共构造函数的组件,例如只有内部或私有构造函数的对象。默认情况下,Autofac 只支持公共构造函数。
如果自定义了 IConstructorFinder
实例,错误信息告诉您自定义构造函数查找器的 FindConstructors()
方法返回了空的构造函数数组。这种场景(创建自定义 IConstructorFinder
)并不常见,但确实会发生。在这种情况下,您会看到组件注册带有 FindConstructorsWith()
调用,以附上自定义构造函数查找器。
检查异常中提到的组件(类),看看是否有任何构造函数。如果没有构造函数,那么应该存在编译器生成的默认无参构造函数(它是公开的)。如果类中有构造函数,那么编译器不会生成那个默认的公开无参构造函数。如果没有任何公开构造函数,那就是问题所在。
有关构造函数选择的更多信息,请阅读 这里 。