使用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
相关产品推荐
相关产品推荐

