我刚开始使用Ninject,我有一个问题。假设我有一个TaxCalculator类,它包含带有Sale参数的构造函数。然后我有一个带有ITaxCalculator成员的Sale类。 Normaly我会在Sale construcor中创建TaxCalculator实例,将'this'作为参数。
public class Sale
{
private ITaxCalculator taxCalculator;
public Sale()
{
this.taxCalculator = new TaxCalculator(this);
}
}
public class TaxCalculator : ITaxCalculator
{
private Sale sale;
public TaxCalculator(Sale sale)
{
this.sale = sale;
}
}
是否可以使用Ninject完成此操作?下面的代码显然不起作用。
public class Sale
{
private ITaxCalculator taxCalculator;
[Inject]
public void SetTaxCalculator(ITaxCalculator taxCalculator)
{
this.taxCalculator = taxCalculator;
}
}
....
using (IKernel kernel = new StandardKernel())
{
Sale sale = null;
kernel.Bind<ITaxCalculator>()
.To<TaxCalculator>()
.WithConstructorArgument("sale", sale);
sale = kernel.Get<Sale>();
}
我希望Ninject做的是在调用Sale构造函数之后调用SetTaxCalculator方法。
答案 0 :(得分:3)
您可以使用属性注入来执行此操作。
但是拥有这样的循环依赖意味着你的设计存在一些缺陷。我强烈建议修复该结构问题,以便只有一个类需要引用另一个类。
e.g。为什么需要税务计算器参考销售?让销售电话计算器并传递所有必需的信息。例如。 CalculateTax(products)