我有一个这样的课程:
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?
答案 0 :(得分:1)
因此,您希望将IService
的相同实例注入多个对象。有两种方法可以做到这一点:
IService
的范围绑定:.InSingletonScope(),InCallScope(),InNamedScope(“xyz”)等(参见https://github.com/ninject/ninject/wiki/Object-Scopes)MyClass
。然后工厂首先实例化IService
(IResolutionRoot.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对你来说也很有趣。