1

我有这样的课:

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;
    }
}

我不知道如何绑定它,以便使用构造函数参数IDependency创建它。service

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

1 回答 1

1

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

  • 范围绑定IService:.InSingletonScope()、InCallScope()、InNamedScope("xyz") 等(参见https://github.com/ninject/ninject/wiki/Object-Scopes
  • 实施并使用工厂来创建MyClass. 然后,工厂首先实例化IService( IResolutionRoot.Get<IService>();),然后MyClass使用 ctor 参数 p.Ex实例化并返回。像这样:IResolutionRoot.Get<MyClass>(new ConstructorArgument("service", service);

您还可以绑定 IMyClass .ToProvider() 并让提供者实现工厂逻辑以摆脱额外的工厂调用。但这会使实际的目标类绑定变得困难,以防你想将一个接口绑定到多个类(有条件或其他)。请参阅如何在 Ninject 中使用提供程序

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

于 2013-10-09T18:57:12.883 回答