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

时间:2013-10-08 16:47:36

标签: c# ninject

我有一个这样的课程:

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?

1 个答案:

答案 0 :(得分:1)

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

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

您还可以绑定IMyClass .ToProvider()并让提供程序实现工厂逻辑以消除额外的工厂调用。但是,如果您希望将接口绑定到多个类(具有条件或其他方式),这会使实际目标类绑定变得困难。见How to use a Provider in Ninject

Creating an instance using Ninject with additional parameters in the constructor对你来说也很有趣。