林學習asp.net的MVC 3.一個新的功能是依賴注入。有人能告訴我它是什麼嗎?爲什麼它有用?以及何時使用它?由於
什麼是依賴注入?
回答
可能更適合於程序員,而是先了解控制
http://en.wikipedia.org/wiki/Inversion_of_control
http://www.martinfowler.com/articles/injection.html
反轉的想法是,一個組件不應該知道如何獲得/創建它的依賴,應該提供完成工作所需的內容。
依賴注入是爲消費代碼提供依賴關係的過程,而不是負責實例化對象本身的代碼。在一個簡單的例子中,您可能有一個負責計算所提供服務的發票的類。你可以立即使用它並將其稱爲「計算」方法:
public class InvoiceBiller
{
public void Bill()
{
Calculator calculator = new Calculator();
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
此方法依賴於Calculator類。這很好,它的工作原理。然而depenedency注入將有你「注入」計算器的依賴:
public class InvoiceBiller
{
private readonly Calculator calculator;
public InvoiceBiller(Calculator calculator)
{
this.calculator = calculator;
}
public void Bill()
{
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
正如你可以在InvoiceBiller類是通過它的構造(依賴注入的形式被稱爲構造函數注入)給出的計算器對象第二個例子中看到。 InvoiceBiller不再關心如何獲取賬單實例,而是簡單地給它一個。
這有助於測試。你可以從你的測試中通過你想要的任何計算器實例。在實際產品運行時,您可以通過計算器連接到數據庫並查看每小時的費率。爲了測試您傳遞一個使用硬編碼率的計算器,以便您的測試不需要訪問數據庫。
採取此基礎上更進一步,你一般通過一個接口,而不是一個具體類型:
public class InvoiceBiller
{
private readonly ICalculator calculator;
public InvoiceBiller(ICalculator calculator)
現在你對編程接口而不是實現。再次從測試中,您可以使用模擬框架來創建您的界面類型的模擬並將其傳遞給類。
事實上,這裏有兩個問題。有「什麼是依賴注入?」和「什麼是MVC 3中新增的」增加了更多'依賴注入支持?「。
依賴注入是一種編程模式,當類沒有定義其他類的新對象之前,他們使用它們(如某些電子郵件發件人類,需要在數據庫中記錄電子郵件不會創建新的記錄器實例),但請求它在不知道它可能是哪個類的情況下提供(使用接口,在我們的例子中稱爲ILogger)。這裏的記錄器是一個依賴項,這個依賴項通過許多方式被請求/注入,或者被請求作爲依賴類的構造函數參數(例如EmailSender),或者只是將它作爲類「set」訪問器的屬性,等等...
有一些庫稱爲依賴注入庫,或控制容器的反轉。那些庫是用來定義哪些類應該在運行時真正使用的,以及要使用哪些其他特定值,並告訴它們爲您創建對象(如創建EmailSender實例),遞歸地將所有依賴項傳遞給它們(所以,如果ILogger實際上是一個需要連接字符串的DBLogger,它也會發送它,等等。)。例子是溫莎,Ninject,Autofac,微軟團結,...
對於示例代碼和更明顯的例子,看到一個傢伙這個漂亮的免費視頻誰在使用ASP.NET MVC團隊合作:
http://tekpub.com/view/concepts/1
ASP.NET MVC總是允許一個工廠類,您可以重寫如何創建Controller類(以便您可以使用DI容器庫創建控制器及其依賴關係,就像它是或EmailSender類一樣)。什麼排在ASP.NET MVC 3.0是在現有功能的改進,並提供更多的方法,如它,使它更容易做DI各地ASP.NET MVC
- Official ASP.NET MVC 3.0 Release Notes: Additional Dependency Injection Support
- http://blogs.microsoft.co.il/blogs/gilf/archive/2010/10/17/dependency-injection-in-mvc-3-was-made-easier.aspx
- http://johan.driessen.se/archive/2010/10/30/dependency-injection-in-asp.net-mvc-3-got-a-lot-simpler.aspx
和
- ASP.NET MVC 3 Service Location: Introduction (Part 1)
- ASP.NET MVC 3 Service Location: Controllers (Part 2)
- ASP.NET MVC 3 Service Location: Views (Part 3)
- ASP.NET MVC 3 Service Location: Filters (Part 4)
檢查出來的深細節...
- 1. 什麼是「手動依賴注入」?
- 2. 什麼意思是依賴注入?
- 3. 什麼是應用依賴注入
- 4. 什麼是Spring對依賴注入的最小依賴?
- 5. 依賴注入模式 - 它是什麼,爲什麼我在乎?
- 6. 什麼是依賴注入,爲什麼要使用它?
- 7. 依賴注入 - 我錯過了什麼?
- 8. 爲什麼要注入依賴關係?
- 9. 什麼依賴注入框架與WebForms
- 10. 什麼時候使用依賴注入?
- 11. 依賴注入地獄,預計什麼?
- 12. 依賴注入 - 注入容器還是個人依賴?
- 13. 什麼是依賴注入用戶輸入的最佳策略?
- 14. 依賴注入
- 15. 依賴注入
- 16. 依賴注入
- 17. 依賴注入
- 18. 依賴注入
- 19. 依賴注入
- 20. 使用依賴注入來注入依賴注入器
- 21. 使用依賴注入優於新的優點是什麼?
- 22. Symfony2中的完全依賴注入是做什麼的?
- 23. 依賴注入容器的要點是什麼?
- 24. 依賴注入 - 什麼是最好的方法?
- 25. 依賴注入的實際用例是什麼?
- 26. 什麼是依賴注入的好隱喻?
- 27. 注入依賴項的目的是什麼
- 28. 依賴注入Android
- 29. MVP依賴注入
- 30. NServiceBus依賴注入
重複的【什麼是依賴注入?](http://stackoverflow.com/questions/ 130794 /什麼,是依賴注入) – jfar 2011-01-14 05:36:49