Итак, я полностью рефакторился для внедрения в конструктор, и теперь у меня есть класс начальной загрузки, который выглядит примерно так:
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 действительно не делает ничего особенного для меня. Если не брать в расчет сигары, вышеприведенное можно записать так:
Type1 type1Impl = Impl1();
Type2 type2Impl = Impl2();
Type3 type3Impl = Impl3(type1Impl, type2Impl);
Type4 type4Impl = Impl4(type1Impl, type3Impl);
type4Impl.Run();
Рефакторинг с инжекцией в конструктор великолепен и действительно открывает возможность тестирования кода. Однако я сомневаюсь в полезности Unity здесь. Я понимаю, что могу использовать платформу ограниченным образом (то есть не вводить контейнер где-либо, конфигурировать в коде, а не в XML, не использовать возможности управления временем жизни), но мне не удается понять, как это на самом деле помогает в этом примере , Я прочитал более одного комментария с мнением, что DI лучше просто использовать в качестве шаблона, без контейнера. Это хороший пример такой ситуации? Какие еще преимущества дает это решение, которое я упускаю?