C# Ninject内核。获取<;T>;实例创建

C# Ninject内核。获取<;T>;实例创建,c#,wpf,dependency-injection,ninject,inversion-of-control,C#,Wpf,Dependency Injection,Ninject,Inversion Of Control,今天,我在我的代码库中发现了一个bug,其中一个注入的依赖项应该在它被注入的类之外。当我期望总是注入依赖关系的新实例时,我得到的是一个旧实例。我从下面的简化代码片段中删除了行this.Kernel.Get(),从而清除了这个bug。虽然这并不是项目的全部情况,但它是犯罪者使用的确切配置 internal sealed class MyNinjectModule : NinjectModule { public override void Load() { this

今天,我在我的代码库中发现了一个bug,其中一个注入的依赖项应该在它被注入的类之外。当我期望总是注入依赖关系的新实例时,我得到的是一个旧实例。我从下面的简化代码片段中删除了行
this.Kernel.Get()
,从而清除了这个bug。虽然这并不是项目的全部情况,但它是犯罪者使用的确切配置

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);
    }
内部密封类MyNinjectModule:NinjectModule
{
公共覆盖无效负载()
{
this.Bind().To();
this.Bind().ToSelf()
.WithConstructorArgument(this.Kernel.Get())
.WithConstructorArgument(this.Kernel.Get())
.WithConstructorArgument(this.Kernel.Get())
.带构造论证(50U);
}
因此,虽然我总是会得到
B
的一个新实例,但我会得到
IA
的一个旧实例。有人能帮我理解
.get
扩展方法的生命周期吗?我总是假设调用
.get
会根据以前的配置生成一个实例如我的绑定所述,这是Ninject的正确行为吗

问询处
  • 使用Ninject 3.2.2.0
  • C#5、.NET4.5框架
  • WPF应用程序

您可以尝试将lambda表达式传递给.WithConstructorArgument()


Ninject应该解析剩余的参数,只要它们有绑定。

您可以尝试将lambda表达式传递给.WithConstructorArgument()


Ninject应该解析剩余的参数,只要它们有绑定。

您可以尝试将lambda表达式传递给.WithConstructorArgument()


Ninject应该解析剩余的参数,只要它们有绑定。

您可以尝试将lambda表达式传递给.WithConstructorArgument()


Ninject应该解决剩余的参数,只要它们有一个绑定。

我明天才能尝试,但当然可以!我完全忽略了代码中缺少lambda的问题。这很有道理。谢谢。回答得很好,特别是关于大多数参数规范都是多余的部分!这里有s无需使用
.WithConstructorArgument()
对于容器注入的想要的东西。这是开箱即用的!我明天才能尝试,但当然可以!我完全忽略了代码中缺少lambda。这很有道理。谢谢。回答得很好,特别是关于大多数参数规范是多余的部分!没有必要使用
.WithConstructorArgument()的步骤
对于容器注入的想要的东西。这是开箱即用的!我明天才能尝试,但当然可以!我完全忽略了代码中缺少lambda。这很有道理。谢谢。回答得很好,特别是关于大多数参数规范是多余的部分!没有必要使用
.WithConstructorArgument()的步骤
对于容器注入的想要的东西。这是开箱即用的!我明天才能尝试,但当然可以!我完全忽略了代码中缺少lambda。这很有道理。谢谢。回答得很好,特别是关于大多数参数规范是多余的部分!没有必要使用
.WithConstructorArgument()
处理容器注入的所需内容。这是现成的!
this.Bind<B>().ToSelf()
        .WithConstructorArgument(() => this.Kernel.Get<IDependencyOne>())
        .WithConstructorArgument(() => this.Kernel.Get<IDependencyTwo>())
        .WithConstructorArgument(() => this.Kernel.Get<IA>())
        .WithConstructorArgument<uint>(50U);
this.Bind<B>().ToSelf()
        .WithConstructorArgument<uint>("uintParamName", 50U);