项目
版本

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() 调用,以附上自定义构造函数查找器。

检查异常中提到的组件(类),看看是否有任何构造函数。如果没有构造函数,那么应该存在编译器生成的默认无参构造函数(它是公开的)。如果类中有构造函数,那么编译器不会生成那个默认的公开无参构造函数。如果没有任何公开构造函数,那就是问题所在。

有关构造函数选择的更多信息,请阅读 这里

在本文档中