我有一些問題了解何時何地正好在我的代碼,我應該使用依賴注入像Ninject。
代碼
比方說,比如我們有下面的代碼:
//WITHOUT NINJECT:
IMailSender mailSender = new MockMailSender();
//WITH NINJECT:
IMailSender mailSender = kernel.Get<IMailSender>();
這個人是不是一個依賴注入所以它是有意義的在這種情況下使用Ninject?
另一個例子展示瞭如何我的代碼被真正使用依賴注入搞砸:
public void CalculateRevenueRecognitions(IContract contract)
{
//WITH NINJECT
var kernel = new StandardKernel(new DefaultModule());
var arguments = new List<IParameter>
{
new ConstructorArgument("amount",contract.Revenue),
new ConstructorArgument("date", contract.WhenSigned)
};
contract.AddRevenueRecognition(kernel.Get<IRevenueRecognition>(arguments.ToArray()));
//WITHOUT NINJECT:
contract.AddRevenueRecognition(new RevenueRecognition(contract.Revenue, contract.WhenSigned))));
}
問題
當我應該使用依賴注入?
- 上構造注射,參數注入等
- 的對象創建(做的依賴注入更換新的?古典對象的創建)
- 是其他人呢?
時候不應該使用依賴注入?
在使用Ninject進行項目並獲得一些基本的熟悉之後,測試對我而言變得更加容易。開始使用用例相當困難,您的示例代碼不應該使用它。我想它更多,因爲你有一個查詢類,你想要使用依賴於數據庫類,依賴於設置類等等。您可以在ninject模塊中定義這些綁定,然後請求一個查詢對象,併爲您注入其他依賴類。 – jones6
它的絕對適用於這個代碼,正如我在下面提到的,它被配置在錯誤的地方。大多數依賴關係可以在應用程序啓動時解決。 –
在業務對象方法中使用kernel.Get <>對我來說似乎不適用。我對ninject仍然很陌生,所以我想我錯了。到目前爲止,我只需要使用構造函數注入。 – jones6