You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Autofac WithParameters注入失败,提示BControlEndpoint未注册

问题原因

你注册BControlEndpoint和GControlEndpoint时,仅将它们注册为IBusConsumer服务,未注册自身的具体类型。当BSControlEndpoint的注册代码中尝试Resolve<BControlEndpoint>时,Autofac找不到对应服务,因此抛出异常。

解决方案

有两种可行的解决方式:

方式一:注册时同时包含自身类型

修改GControlEndpoint和BControlEndpoint的注册代码,添加AsSelf(),让Autofac同时注册具体类型和接口类型:

builder.RegisterType<GControlEndpoint>().As<IBusConsumer>().AsSelf().SingleInstance();
builder.RegisterType<BControlEndpoint>().As<IBusConsumer>().AsSelf().SingleInstance();

builder.RegisterType<BSControlEndpoint>().As<IBusConsumer>().SingleInstance()
  .WithParameter((pi, c) => pi.Name == "bControlEndpoint",
    (pi, c) => c.Resolve<BControlEndpoint>())
  .WithParameter((pi, c) => pi.Name == "gControlEndpoint",
    (pi, c) => c.Resolve<GControlEndpoint>());

方式二:移除手动参数注入,让Autofac自动匹配

既然BSControlEndpoint的构造函数参数是具体类型,且你已经注册了这些类型的实例,可直接移除WithParameter配置,Autofac会自动根据类型匹配注入:

// 先确保注册时包含自身类型
builder.RegisterType<GControlEndpoint>().As<IBusConsumer>().AsSelf().SingleInstance();
builder.RegisterType<BControlEndpoint>().As<IBusConsumer>().AsSelf().SingleInstance();

// 移除手动参数配置
builder.RegisterType<BSControlEndpoint>().As<IBusConsumer>().SingleInstance();

内容的提问来源于stack exchange,提问作者bob123123123123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:04:54