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

使用Ninject ToMethod时NServiceBus找不到NinjectObjectBuilder作用域的问题

解决Ninject UnitOfWorkScope下解析依赖的异常问题

你遇到的是Ninject命名作用域(Named Scope)相关的依赖解析异常,核心问题出在获取MessagingContext实例的方式上。

问题原因

当你在ToMethod中调用c.Kernel.Get<MessagingContext>()时,它会直接从根容器中尝试获取实例,而不是从当前激活的UnitOfWorkScope作用域内查找。但你的MessagingContext明确绑定在UnitOfWorkScope作用域下,根容器无法定位到这个作用域内的实例,因此抛出命名作用域相关的异常。

修正方案

把c.Kernel.Get<MessagingContext>()改成c.Get<MessagingContext>(),利用当前的解析上下文IContext来获取依赖,这样就能正确关联到当前的UnitOfWorkScope作用域:

Bind<IBus>().ToMethod(c => {
    var messagingContext = c.Get<MessagingContext>(); // 改用当前上下文的Get方法
    return new Bus(messagingContext);
});

额外注意点

  • IContext.Get<T>()会沿着当前的解析链和激活的作用域查找实例,能正确识别InUnitOfWorkScope()定义的作用域规则;
  • 后续在Ninject中获取作用域绑定的依赖时,都应该优先使用IContext的Get方法,而非直接调用Kernel.Get(),避免作用域不匹配的问题;
  • 确保你的UnitOfWorkScope已经正确启动(比如通过using(var scope = kernel.BeginUnitOfWorkScope())的方式),否则即使修正了代码,也会因没有激活的作用域抛出异常。

内容的提问来源于stack exchange,提问作者alex.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:31:12