C# 注射';这';带着尼尼特
我刚开始使用Ninject,我有一个问题。假设我有一个TaxCalculator类,它具有带Sale参数的构造函数。然后我和ITaxCalculator会员一起上销售课。通常,我会在Sale construcor中创建TaxCalculator实例,并将“this”作为参数C# 注射';这';带着尼尼特,c#,ninject,C#,Ninject,我刚开始使用Ninject,我有一个问题。假设我有一个TaxCalculator类,它具有带Sale参数的构造函数。然后我和ITaxCalculator会员一起上销售课。通常,我会在Sale construcor中创建TaxCalculator实例,并将“this”作为参数 public class Sale { private ITaxCalculator taxCalculator; public Sale() { this.taxCalculato
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>();
}
公共类销售
{
私人ITaxCalculator taxCalculator;
[注入]
公共无效SetTaxCalculator(ITaxCalculator taxCalculator)
{
this.taxCalculator=taxCalculator;
}
}
....
使用(IKernel kernel=new-StandardKernel())
{
销售=空;
kernel.Bind()
.至()
.与施工方辩论(“销售”,销售);
sale=kernel.Get();
}
我希望Ninject在调用Sale构造函数之后调用SetTaxCalculator方法。您可以使用属性注入来实现 但是有这样的循环依赖性意味着你的设计有一些缺陷。我强烈建议修复这个结构问题,这样只有一个类需要引用另一个类
e、 g.为什么需要税务计算器作为销售参考?让sale调用计算器并传递所有必需的信息。例如,
CalculateTax(产品)
感谢您的回复,在我的应用程序中,我遇到了比我在这里作为示例编写的更复杂的问题。不过,我会考虑你的建议。财产注入可能就是我想要的,谢谢。