Я читал об инфраструктурах инверсии элементов управления, и я просто играю с вопросом: «Почему, черт возьми, мне нужна инфраструктура для этого?»Зачем использовать каркас IoC
Не поняли мой вопрос ... шаблон часто используется программистами, но ... полнофункциональная структура для этого?
Должно быть, мне что-то не хватает, и поэтому я задаю вопрос. Я видел много примеров в Интернете, и я просто не понимаю. Возможно, mi mind заблокирован.
Просто взгляните на примере на Ninject Главных страниц:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
public class WarriorModule : NinjectModule {
public override void Load() {
Bind<IWeapon>.To<Sword>();
}
}
Класс «Самурай» это нормален для меня. Структура «NinjectModule» кажется мне ненужной.
Я предполагаю, что позже в коде, мы будем создавать новые «Самурай» экземпляры, проходящие в тех случаях, «Меч» к нему, что-то вроде:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
, который может быть заменен:
Samurai theWarrior = new Samurai(new Sword());//still no coupling
или
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
Что часть я пропускаю? Не могли бы вы рассказать о каком-то сценарии, когда в моем приложении может понадобиться структура Ioc?
Спасибо.
ОБНОВЛЕНИЕ ПОСЛЕ 4 ОТВЕТОВ: Мне очень понравились все ответы, которые я получил от вас, ребята. Я просто прочитал этот пост dependency-injection-dissection/, где парень использовал его для тестирования Unit и ссылки StackOverflow, которую вы только что предоставили, и да, мне не хватало большую часть большой сложности, поэтому позвольте себе использовать IoC framework. Еще раз спасибо.
Я проголосовал бы за ваши ответы, но я просто получаю оранжевое сообщение, говорящее, что не могу.
Благодаря парню, который выделил код, который я разместил.
Я хотел бы предложить редактирование вопроса, чтобы сделать блоки кода фактических блоков кода, либо 'подсветки и нажав Ctrl-K 'или вставив четыре пробела перед каждой строкой кода. – jcolebrand
'new Samurai (новый Sword()); // до сих пор нет связи. Здесь есть жесткая связь, вы используете' new'. Когда вы реорганизуете это, вам придется менять каждое место, создающее Меч. – nos
Возможный дубликат [Почему мне нужен контейнер IoC, а не простой код DI?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-straight-di-code) –