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

注册依赖后仍触发InvalidOperationException,问题原因是什么?

问题原因与解决办法

你注册依赖时用的是builder.Services.AddSingleton<IFoo, Foo>(),这表示你向DI容器注册的是接口IFoo,对应的实现类是Foo,但DI容器并不会自动注册具体类Foo本身。当你在路由处理方法里用[FromServices] Foo f请求Foo类型的服务时,容器找不到这个类型的注册项,就会抛出InvalidOperationException。

两种解决方式:

方式一:修改路由方法,依赖接口IFoo

把参数类型改成IFoo,DI容器就能匹配到已注册的服务:

app.MapGet("/", ([FromServices] IFoo f) =>
{
    f.Print();
    return "Hello World!";
});

方式二:额外注册Foo类型的服务

如果确实需要直接注入Foo,可以在注册时添加对Foo的单独注册:

builder.Services.AddSingleton<IFoo, Foo>();
builder.Services.AddSingleton<Foo>(); // 新增该行注册具体类

更推荐方式一,因为依赖注入的核心思想是面向接口编程,依赖接口而非具体实现能降低代码耦合度,也更便于后续扩展和测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:04:56