我可以使用什么 Ninject 绑定,以便一个参数在构造函数中用于另一个参数

本文关键字:参数 一个 构造函数 另一个 用于 什么 可以使 Ninject 绑定 我可以 | 更新日期: 2023-09-27 18:34:22

我有这样的类:

public class MyClass
{
    public MyClass(IService service)
    {
        this.Service = service;
        this.Dependency = new Dependency(service);
    }
}

我想将new Dependency()调用移动到构造函数。

public class MyClass
{
    public MyClass(IService service, IDependency dependency)
    {
        this.Service = service;
        this.Dependency = dependency;
    }
}

我无法弄清楚如何绑定它,以便使用 service 构造函数参数创建IDependency

Bind<IDependency>()
  .To<Dependency>()
    .WithConstructorArgument("service", ctx => ctx.???); // How do I do this?

我可以使用什么 Ninject 绑定,以便一个参数在构造函数中用于另一个参数

因此,您希望将相同的IService实例注入到多个对象中。有两种方法可以实现此目的:

  • IService的范围绑定:。InSingletonScope(), InCallScope(), InNamedScope("xyz") 等(参见 https://github.com/ninject/ninject/wiki/Object-Scopes)
  • 实现并使用工厂来创建MyClass。然后工厂 1st 实例化 IServiceIResolutionRoot.Get<IService>(); ),然后使用 ctor 参数实例化并返回MyClass,p.Ex. 如下所示:IResolutionRoot.Get<MyClass>(new ConstructorArgument("service", service);

您也可以绑定 IMyClass 。ToProvider() 并让提供程序实现工厂逻辑以摆脱额外的工厂调用。但是,如果要将接口绑定到多个类(有条件或其他条件),这使得实际的目标类绑定变得困难。了解如何在 Ninject 中使用提供程序

使用 Ninject 在构造函数中创建带有其他参数的实例也可能对您来说很有趣。