【发布时间】:2023-04-08 18:42:01
【问题描述】:
今天我在我的代码库中发现了一个错误,其中一个注入的依赖项据说在它被注入的类中存在。当我期望总是注入一个新的依赖实例时,我得到了一个旧实例。我设法通过从下面的简化 sn-p 中删除行 this.Kernel.Get<IA>() 来清理错误。虽然这不是项目的全貌,但它是用于犯罪者的确切配置。
internal sealed class MyNinjectModule : NinjectModule
{
public override void Load()
{
this.Bind<IA>().To<A>();
this.Bind<B>().ToSelf()
.WithConstructorArgument(this.Kernel.Get<IDependencyOne>())
.WithConstructorArgument(this.Kernel.Get<IDependencyTwo>())
.WithConstructorArgument(this.Kernel.Get<IA>())
.WithConstructorArgument<uint>(50U);
}
因此,虽然我总是会得到B 的新实例,但我会得到IA 的旧实例。谁能帮我了解IResolutionRoot 中的.Get<T> 扩展方法的生命周期?我一直认为对.Get<T> 的调用会根据我的绑定设置的先前配置生成一个实例。这是 Ninject 的正确行为吗?
信息
- 使用 Ninject 3.2.2.0
- C# 5、.Net 4.5 框架
- WPF 应用程序
【问题讨论】:
标签: c# wpf dependency-injection ninject inversion-of-control