我有一个这样的课:
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?
因此,您希望将相同的实例IService
ctor注入到多个对象中。有两种方法可以实现此目的:
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在构造函数中使用其他参数创建实例对您来说也可能很有趣。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句