.NET Core MVC依赖注入报错:激活控制器时无法解析服务
解决.NET Core依赖注入错误:无法解析IBlogRepository服务
错误信息
InvalidOperationException: Unable to resolve service for type 'BlogApi.Models.IBlogRepository' while attempting to activate 'BlogApi.Controllers.BlogController'.
排查及解决步骤
- 检查命名空间一致性:确认
IBlogRepository和BlogRepository的命名空间与Startup类中引用的完全一致。比如接口在BlogApi.Models,实现类不能在未被引用的其他命名空间下,需确保Startup类顶部添加了对应命名空间的using语句。 - 验证程序集引用:如果仓储类和接口位于独立类库项目,务必确认Web项目已正确引用该类库(右键Web项目→添加项目引用,选中目标类库)。
- 检查访问修饰符:确保
IBlogRepository和BlogRepository都使用public修饰符,DI容器无法访问internal或私有类型。 - 确认Startup配置生效:检查Program.cs(.NET 3.1+)或WebApplicationBuilder配置(.NET 6+),确保
Startup类被正确加载,ConfigureServices方法被执行。 - 核对注册拼写与顺序:再次确认
services.AddScoped<IBlogRepository, BlogRepository>();的泛型参数顺序(接口在前,实现类在后),且类名无拼写错误。
你的代码参考
控制器代码
public class BlogController : ControllerBase { private readonly IBlogRepository _blogRepository; public BlogController(IBlogRepository blogRepository) { _blogRepository = blogRepository; } }
Startup代码
public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DBConnection"))); services.AddScoped<IBlogRepository, BlogRepository>(); services.AddControllers(); }
BlogRepository实现
public class BlogRepository : IBlogRepository { private readonly AppDbContext _context; public BlogRepository(AppDbContext context) { _context = context; } public async Task<IEnumerable<Blog>> Search(string name) { return await _context.Blogs .Where(b => b.Name.Contains(name)) .ToListAsync(); } }
IBlogRepository接口
public interface IBlogRepository { // Search blogs by name Task<IEnumerable<Blog>> Search(string name); }
内容的提问来源于stack exchange,提问作者Gen
相关产品推荐
相关产品推荐

