回答
術語沒有單一的定義 - 在一個容器中實現爲「子容器」的東西在另一個容器中通常具有完全不同的邏輯功能。
在Autofac和一些相似的容器中,「子容器」(因爲v2,只是一個「生命週期範圍」)是一種創建相關組件的方法,其生命週期比「父」容器短,因此依賴性只能從孩子到父母解決,而不能以其他方式解決。
其他容器有不同的實現方式,有些允許依賴解決方案兩種方式(至少在我的理解。)你正在使用的特定容器是一個重要的額外的信息,讓這個問題更權威地回答。
希望這會有所幫助!
IoC - 或控制反轉 - 是一種讓您的課程依賴於服務和其他課程的方式,而無需真正知道如何啓動它們,只知道如何使用它們。請看下面的例子:
public class MyService
{
public void DoSomething()
{
Logger l = new Logger(); // let's assume this class exists, and it logs stuff
l.Info("Some info logmessage");
}
}
在這裏,我們會打電話給該服務:現在
public class MyProgram {
public MyProgram()
{
MyService myService = new MyService();
myService.DoSomething();
}
}
,依賴注入或IoC的,我們可以顛倒記錄的責任。簡而言之,這意味着MyService
不應該知道如何實現記錄器的實例化,但它應該知道如何使用它。
所以我們說的Logger
類實現所謂ILog
只包含無效的方法的接口Info(string s)
然後我們可以重構我們的MyService
類這樣的:
public class MyService
{
ILog _logger;
public MyService(ILog logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.Info("Some info logmessage");
}
}
這則意味着我們將不得不重構MyProgram
以及:
public class MyProgram {
public MyProgram()
{
ILog logger = new Logger(); // instanciate it here instead.
MyService myService = new MyService(logger);
myService.DoSomething();
}
}
這基本上是控制反轉,但是當我們開始談論依賴注入時,這可以全部自動化。比方說,我們想要使用Ninject進行注射。我不打算在這裏寫一個代碼示例,但基礎是Ninject將基本設置爲知道當某個類需要ILog
接口時,我們應該返回Logger
類。
這使我們能夠輕鬆地更改我們想要用於不同接口的實現方式 - 也提高了可測試性。
我會在tekpub上推薦這個簡短的免費視頻,通過使用Ninject介紹IoC和依賴注入的示例。
http://www.tekpub.com/view/concepts/1
希望這有助於!
我看到我可能會誤解這個問題,更多地回答關於IoC和dep.injection的問題。對不起,我..我會留在這裏無論如何..也許它可以幫助某人:) – 2011-03-25 08:34:51
謝謝你的反應! – 2011-03-29 04:02:34
- 1. 爲什麼MEF不是DI/IoC容器?
- 2. 「IoC容器」中「容器」的用途是什麼?
- 3. 爲什麼我們需要ioc容器
- 4. 什麼是Web服務,它們是如何使用的?
- 5. 什麼是「裝飾者」,它們是如何使用的?
- 6. 什麼是合併模塊,它們是如何使用的?
- 7. 什麼是私人FrameWorks,我們將如何使用它們?
- 8. 什麼是Spring IOC
- 9. 什麼是分配器,何時需要它們的使用?
- 10. 微軟報表設計器 - 什麼是表組,它們是如何使用的?
- 11. ObjectSpace - 它是什麼以及人們如何使用它?
- 12. IoC容器使用的反模式。爲什麼IoC容器如此複雜,並且如此「花哨」地使用?
- 13. 什麼是「因子圖」,它們對於什麼有用?
- 14. Jmeter中的JTL是什麼?如何使用它們?
- 15. 什麼是IntelliJ中的「手錶」以及如何使用它們?
- 16. 什麼是HTTP_PROFILE瀏覽器標題,它是如何使用的?
- 17. .NET中IoC容器的當前狀態是什麼?
- 18. CXXSources--它們是什麼?
- 19. MySQL加入?他們是什麼?何時使用它們?
- 20. expires頭?我如何實施它們,它們是什麼?
- 21. 何時使用IOC容器?
- 22. 什麼是R中的因子,爲什麼我們需要它
- 23. 什麼是葉證書和子證書用於以及如何使用它們?
- 24. 如何使用統一的IoC容器
- 25. GuidAttribute&ProgId,它們是幹什麼用的?
- 26. 什麼是使用服務層時配置IoC容器的正確層?
- 27. 在ASP.NET 5中使用第三方IoC容器的優勢是什麼
- 28. 什麼是表達樹,您如何使用它們,以及爲什麼要使用它們?
- 29. 是IoC容器單身還是靜態?
- 30. HTML5中的內容是什麼?以及如何使用它?
我沒有確切的上下文對不起,這只是一個普遍的問題,謝謝。 – 2011-03-29 04:02:07
不客氣,很高興幫助。 – 2011-03-29 10:43:43