Что на самом деле делает для меня контейнер IOC?

Итак, я полностью реорганизовал внедрение конструктора, и теперь у меня есть класс загрузчика, который выглядит примерно так:

var container = new UnityContainer();
container.RegisterType<Type1, Impl1>();
container.RegisterType<Type2, Impl2>();
container.RegisterType<Type3, Impl3>();
container.RegisterType<Type4, Impl4>();

var type4Impl = container.Resolve((typeof)Type4) as Type4;
type4Impl.Run();

Я смотрел на него секунду, прежде чем понял, что Unity не делает для меня ничего особенного. Опуская ctor sigs, приведенное выше может быть записано как:

Type1 type1Impl = Impl1();
Type2 type2Impl = Impl2();
Type3 type3Impl = Impl3(type1Impl, type2Impl);
Type4 type4Impl = Impl4(type1Impl, type3Impl);
type4Impl.Run();

Рефакторинг внедрения конструктора великолепен и действительно открывает тестируемость кода. Однако я сомневаюсь в полезности Unity здесь. Я понимаю, что могу использовать фреймворк ограниченным образом (т. Е. Не внедрять контейнер куда-либо, настраивать в коде, а не в XML, не используя возможности управления временем жизни),но я не понимаю, как это на самом деле помогает в этом примере. Я прочитал не один комментарий, в котором говорилось, что лучше использовать DI просто как образец, без контейнера. Это хороший пример той ситуации? Какие еще преимущества этого решения я упускаю?

5
задан Chris Trombley 9 August 2011 в 19:06
поделиться