Здравствуйте, Tom, Вы писали:
Tom>·>Это ты о чём? О каком-то конкретном контейнере?
Tom>О большинстве современных. Lightinject, DryIoc, Unity, StructureMap итп
Tom>Больше скажу, с вовременных зачастую конфигурация только через код.
Я все не смотрел, посмотрел только первый. А что именно там хорошего, современного?
container.Register<IFoo, Foo>();//я очень надеюсь, что интерфейс IFoo необязателен и регистрировать можно просто Foo.
container.Register<IFoo, AnotherFoo>("AnotherFoo"); // В самом деле? магические строки?!
var instance = container.GetInstance<Bar>();// Service Locator?!! фтопку.
container.RegisterInstance<string>("SomeValue");
var value = container.GetInstance<string>();// в контекст суём тип string?!!
Куча вредных антипаттернов, которые легко размазать по всему проекту, а обычно достаточно одного единственного constructor injection. И вычищать потом это — замучаешься.
И собственно тупой код типа:
var someValue = "SomeValue";
var anotherFoo = new AnotherFoo();
var instance = new Bar(anotherFoo, someValue);
выглядит ничуть не хуже.
Единственное для чего эти контейнеры могут быть хороши это всякое Assembly Scanning, но реально проектов, где это необходимо — очень мало.
Tom>Пользовать DI без контейнера конечно можно но жутко неудобно.
Зато полная поддержка компилятора и IDE. А неудобно только с непривычки.