2013-03-04 83 views
1

我剛開始使用Ninject,我有一個問題。可以說我有一個TaxCalculator類,它具有Sale參數的構造函數。然後,我有ITaxCalculator成員的Sale類。通常我會在銷售結構中創建TaxCalculator實例,將「this」作爲參數。用Ninject注入'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做的是調用SetTaxCalculator方法調用構造函數銷售後。

回答

3

您可以使用屬性注入來做到這一點。

但是具有這種循環依賴意味着您在設計中存在一些缺陷。我強烈建議解決這個結構性問題,以便只有一個類需要引用另一個類。

例如爲什麼需要稅計算器參考銷售?讓銷售打電話給計算器,並通過所有必要的信息。例如。 CalculateTax(products)

+0

感謝您的回覆,在我的應用程序中,我的問題比我在這裏作爲例子寫得更復雜。不過,我會考慮你的建議。 屬性注入可能是我正在尋找,謝謝。 – Brazol 2013-03-04 14:00:59