ASP.NET Core依赖注入报错:无法解析SendSMS服务
问题解决:ASP.NET Core依赖注入无法解析具体类
核心原因
你通过builder.Services.AddTransient<IsmsSender, SendSms>()注册的是接口与实现类的映射关系,DI容器仅知晓如何解析IsmsSender接口实例,但你在HomeController构造函数中直接注入的是具体类SendSms,容器找不到该类的注册信息,因此抛出解析失败的异常。
两种解决方案
方案一:注入接口(推荐,符合依赖倒置原则)
修改HomeController的构造函数,注入IsmsSender接口而非具体类:
public class HomeController : Controller { private readonly IsmsSender _smsSender; // 注入接口类型 public HomeController(IsmsSender smsSender) { _smsSender = smsSender; } // 业务逻辑中直接使用_smsSender调用接口方法即可 }
这种方式能降低代码耦合,后续若需替换短信发送实现(比如换成AliyunSendSms),只需修改注册代码,无需改动控制器逻辑。
方案二:注册具体类(仅当必须直接使用具体类时)
如果业务场景确实需要直接注入SendSms,在Program.cs中额外注册该具体类:
// 保留原接口-实现映射 builder.Services.AddTransient<IsmsSender, SendSms>(); // 新增具体类的独立注册 builder.Services.AddTransient<SendSms>();
内容的提问来源于stack exchange,提问作者Aliparsa
相关产品推荐
相关产品推荐

