我花了很多時間瞭解ioc。我從來不明白在這種模式下究竟是如何反向控制的。即使我對倒置的確切含義感到困惑。在正常的英語中,反轉有點像倒轉,比如倒轉一個杯子。控制反轉在哪裏控制
如果我認爲依賴注入作爲Ioc。我想知道在這裏倒轉的確切位置。我明白在這裏DI,依賴從與構造,二傳手的幫助外部實體插入........
但我從來不明白的地方的控制,這裏倒...
任何幫助讚賞。
我花了很多時間瞭解ioc。我從來不明白在這種模式下究竟是如何反向控制的。即使我對倒置的確切含義感到困惑。在正常的英語中,反轉有點像倒轉,比如倒轉一個杯子。控制反轉在哪裏控制
如果我認爲依賴注入作爲Ioc。我想知道在這裏倒轉的確切位置。我明白在這裏DI,依賴從與構造,二傳手的幫助外部實體插入........
但我從來不明白的地方的控制,這裏倒...
任何幫助讚賞。
舊風格:
Class car
{
Engine _engine;
Public Car()
{
_engine = new V6();
}
}
倒:
Class car
{
Engine _engine;
Public Car(Engine engine)
{
_engine = engine;
}
}
var car = new Car(new V4());
調用者的控制,而不是汽車類
依賴注入反向控制。
例如一個汽車類需要一個引擎類。發動機可以是任何類型的發動機。
如果你不使用DI,汽車類將決定引擎類型本身,汽車類是在控制之下。
當使用DI時,實例化汽車的代碼將確定汽車的類型(例如通過在構造函數中指定引擎),調用代碼現在處於控制狀態。控制從汽車類轉換爲調用代碼。
謝謝,尼斯解釋。在你的最後一句話中(反轉從汽車類轉換爲調用代碼。)反轉和反轉的確切含義是什麼?是否「控制從汽車級轉換爲調用呼叫代碼」?在這種情況下,倒轉是有點像移動?我真的很困惑這個詞倒... – Brainchild 2012-01-15 08:40:02
糟糕,應該控制而不是倒置。 – 2012-01-15 08:45:27
控制什麼類型的引擎使用從汽車移動到調用代碼 – 2012-01-15 08:48:08
爲了擴大對羅賓的回答是:
IUserRepository _user = new UserRepository();
//you're in control of which instance is created.
依賴注入:
IUserRepository _user;// you will not do anything else.
基於配置的其他地方,你可以使用依賴注入框架將創建權的護理實例爲你。這是控制從您的代碼反轉。您不是直接從您的代碼創建任何實例。
爲什麼?你爲什麼要這樣做?
一個主要優勢是測試,當您運行測試時,您可以配置您的IUserRepository
假的。
看到這個:http://stackoverflow.com/questions/5433211 /差異之間依賴注入和嘲弄框架ninject相對rhinom/5433231#5433231 – gideon 2012-01-15 08:34:54