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

如何在依赖注入(DI)容器中注册委托及EF数据库查询实现

解决方法

首先得把NameCheckService本身注册到依赖注入容器中,因为它依赖MyContext,需要容器管理它的生命周期与依赖注入:

services.AddScoped<NameCheckService>();

接着注册你的委托,通过容器获取NameCheckService实例,再把它的IsNameAvailable方法绑定为委托:

services.AddScoped<Services.INameAvailable>(sp => 
    sp.GetRequiredService<NameCheckService>().IsNameAvailable);

为什么原写法不生效?

你之前尝试的NameCheckService.IsNameAvailable是实例方法而非静态方法,直接引用必须依赖NameCheckService的实例才能生成委托。而DI容器需要负责初始化这个实例(因为它依赖MyContext),所以必须通过IServiceProvider(即代码中的sp参数)获取已初始化的NameCheckService实例,再将其方法赋值给委托。

补充说明

  • 这里用AddScoped是因为MyContext通常也是Scoped生命周期,保持一致可避免生命周期不匹配的问题;
  • 若委托需要和NameCheckService同生命周期,Scoped是合适选择;若要Singleton,需确保NameCheckService和MyContext的生命周期支持(不过DbContext一般不建议设为Singleton)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:06