Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

Не понятен смысл DI

Мне не до конца понятен смысл использование DI (например autofac). Возможно, я не правильно трактую его смысл из-за неверной области применения.
Контекст задачи следующий: необходимо внедрить autofac модуль в систему тестирования. Собственно проблема, зачем мне писать код с разрешением зависимостей через тот же autofac если могу явно создавать объекты и передовать их в конструктор.
К примеру, есть ApiController, у него в конструкторе куча аргументов типа пользовательского контекста, менеджера регистрации, менеджера для отправки смс и т.д. Все эти объекты в свою очередь тоже достаточно сложно инициализируются. К примеру:
Вариант с Autofac
ISomeClassInterface someClass; var builder = new ContainerBuilder(); builder.RegisterType(); var container = builder.Build(); someClass = new SomeClass(container.Resolve();
Вариант без Autofac'a
ISomeClassInterface someClass; ISomeService service = new SomeService(some arguments...); someClass = new SomeClass(service);


Ответ

Вы сами ответили на свой вопрос: "Все эти объекты в свою очередь тоже достаточно сложно инициализируются". Чем сложнее, тем проще ошибиться. Безусловно, можно не использовать никакой DI. Но, во-первых, DI упрощает инициализацию объектов. Во-вторых, DI упрощает подмену объектов. Например, вы захотите использовать другой менеджер регистрации. Без DI придется менять код в нескольких местах, с DI - в одном.
Сравните:
A a = new A(new B(new C()), new D(new E())...);
И как-то условно
A a = container.Resolve();

Комментариев нет:

Отправить комментарий