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

如何为自托管MVC 4 API控制器配置依赖注入

问题原因

报错是Web API默认控制器激活器未从依赖解析器中获取到DataController实例,转而尝试调用无参构造函数实例化失败导致的。

解决步骤

1. 注册控制器到依赖注入容器

你当前仅注册了IRepository的实现,没有将DataController加入服务集合,依赖解析器无法返回控制器实例,激活器就会降级走无参构造逻辑。
如果使用Microsoft.Extensions.DependencyInjection,在服务注册阶段添加控制器注册即可:

var services = new ServiceCollection()
    .AddSingleton<IRepository>(new InMemoryRepository())
    // 控制器生命周期可按需求选择Transient/Scoped
    .AddTransient<DataController>();

如果使用Ninject,同样需要绑定控制器:

kernel.Bind<DataController>().ToSelf();

2. 移除冗余配置

你在代码中两次为httpConfiguration.DependencyResolver赋值,属于冗余操作,删除其中一次即可,避免重复构建服务提供器导致实例不一致。

3. 可选:显式替换控制器激活器

如果修改后仍报错,可以显式替换控制器激活器,强制从依赖解析器获取控制器实例,完全跳过默认的无参构造查找逻辑:

httpConfiguration.Services.Replace(typeof(IHttpControllerActivator), 
    new ServiceProviderControllerActivator(services.BuildServiceProvider()));

额外提示

你代码中注册IRepository时写的ImMemoryRepository拼写多了一个m,应为InMemoryRepository,如果是实际代码的拼写错误也会导致依赖解析失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:27:05