我可以使用什么 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?
因此,您希望将相同的IService
实例注入到多个对象中。有两种方法可以实现此目的:
IService
的范围绑定:。InSingletonScope(), InCallScope(), InNamedScope("xyz") 等(参见 https://github.com/ninject/ninject/wiki/Object-Scopes)- 实现并使用工厂来创建
MyClass
。然后工厂 1st 实例化IService
(IResolutionRoot.Get<IService>();
),然后使用 ctor 参数实例化并返回MyClass
,p.Ex. 如下所示:IResolutionRoot.Get<MyClass>(new ConstructorArgument("service", service);
您也可以绑定 IMyClass 。ToProvider() 并让提供程序实现工厂逻辑以摆脱额外的工厂调用。但是,如果要将接口绑定到多个类(有条件或其他条件),这使得实际的目标类绑定变得困难。了解如何在 Ninject 中使用提供程序
使用 Ninject 在构造函数中创建带有其他参数的实例也可能对您来说很有趣。