ASP.NET Core报错Unable to resolve service无法激活AuthController求助
问题根因
这个异常是ASP.NET Core依赖注入容器的典型报错:你在AuthController的构造函数中声明要注入SendEmail类型的实例,但项目启动时没有将该类型注册到DI容器中,容器在尝试实例化控制器时找不到对应的服务实现,就会抛出该错误。
解决步骤
- 打开项目的启动配置文件:.NET 6及以上版本打开
Program.cs,.NET 5及更早版本打开Startup.cs文件里的ConfigureServices方法。 - 注册
SendEmail服务,可根据业务对生命周期的需求选择对应注册方式:- 单例模式(全局唯一实例):用
AddSingleton - 作用域模式(每次请求创建一个实例):用
AddScoped - 瞬时模式(每次获取服务都创建新实例):用
AddTransient
示例代码(.NET 6+ Program.cs),需要写在var app = builder.Build();之前:
// 注册SendEmail服务,这里以Scoped生命周期为例 builder.Services.AddScoped<SendEmail>(); - 单例模式(全局唯一实例):用
- 检查
SendEmail的依赖项是否也完成注册:SendEmail构造函数中还注入了AadGraphApiDelegatedClient类型,你需要确认该类型也已注册到DI容器中,否则后续会继续抛出服务无法解析的错误,注册方式参考如下:// 同样根据实际需求选择生命周期 builder.Services.AddScoped<AadGraphApiDelegatedClient>();
额外检查项
- 确认注册
SendEmail时引入的命名空间和你定义该类的命名空间IcarusOnlineAPI.Services.Email一致,避免注册了其他同名类导致问题依旧存在。 - 确认项目
wwwroot目录下存在EmailTemplates/RecoverAccount.html文件,否则调用邮件发送方法时会抛出文件找不到的运行时错误。
内容的提问来源于stack exchange,提问作者Quenio Rojer
相关产品推荐
相关产品推荐

