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

Ninject如何配置实现每次Get<>调用返回指定依赖项的非共享实例

默认绑定的实例返回规则

你当前使用的无作用域指定的绑定写法:

kernel.Bind<IMyDependency>().To<MyDependencyImplementation>();

在Ninject中默认采用*瞬态(Transient)*作用域,单个应用域内多次调用kernel.Get<IMyDependency>()时,默认就会每次返回全新的独立实例,不会共享实例。只有当你显式为绑定配置了.InSingletonScope()、.InThreadScope()等共享类作用域时,才会返回同一个实例。

显式配置每次返回全新非共享实例的方法

如果需要强制针对该依赖项生效每次调用Get<>都返回独立实例的规则,可以在绑定时显式声明瞬态作用域,代码如下:

kernel.Bind<IMyDependency>().To<MyDependencyImplementation>().InTransientScope();

配置完成后,Ninject每次收到IMyDependency类型的实例解析请求时,都会创建一个全新的MyDependencyImplementation实例返回,不同调用拿到的实例完全隔离,可临时规避该依赖项的线程安全问题。

注意:该配置仅作用于IMyDependency本身的实例,如果MyDependencyImplementation内部依赖的其他服务配置了共享作用域,这些嵌套依赖仍为共享实例,若嵌套依赖也存在线程安全问题,需要对应调整它们的作用域配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:30:04