T>>>>все разговоры в этой теме от банального непонимания, для чего придумали DI / IoC
T>>·>Это верно.
T>>·>А придумали контейнеры для сборки монструозных монолитных enterprise приложений из крупных отдельно поставляемых компонент, плагинной архитектуры, внутри так называемых application servers.
T>>
о чём ты вообще? идея юнит-тестирования намного старше веб-серверов...
·>"веб-сервер" я не говорил, не приписывай мне ложные высказывания.
ой, насмешил... твой сервер приложений ещё моложе, чем веб-сервера
·>Для юнит-тестирования контейнер не нужен тоже, чаще даже вреден. Нужен DI.
ну ка покажи, как ты собираешься делать DI без Ioc контейнера
T>>>>как ты с твоим этим кодом будешь писать код, который это проверяет?
·>T>>·>var mainService = new MainService(new InMemoryProvider(), new Configuration(), new IdentityProvider(Thread.Current.Identity), new FileManager() , new EmailSerice(new SmtrAddress(25.145.789), etc.));
T>>·>...
·>
·>Ты предлагаешь посылать письма и писать файлы из тестов? Особенно весело бороться в тестах с многопоточкой. Нет, в тестахм добрая половина этих зависимостей будут тестовые реализации.
ты сам назвал сервис "Main", а теперь на меня обижаешься ? в том-то и дело, что в одном случае у тебя его в твоём тесте даже инициировать толком не получится, а в моём варианте инициализация и тестового и продуктивного кода выглядит почти одинаково, с одним лишь отличием, что я подменяю то, что тестирую и вызываю тем, что меня в тесте интересует
·>А для второй половины — если же ты хочешь потестировать интеграцию MainService с какими-то фиксированными зависимостями, которые так же используются и в реальном приложении тоже, просто делаешь классическую композицию и у тебя получается переиспользуемый модуль со своими зависимостями, например что-то типа такого:
·>·>class MainServiceModule
·>{
·> MainService service;
·> MainServiceModule(DbProvider dbProvider, EmailService emailService)
·> {
·> service = new MainService(dbProvider, configuration, new IdentityProvider(Thread.Current.Identity), new FileManager(), emailService);
·> }
·>}
·>
ну это уже тонкости, как ты там назовёшь: модуль , сервис или ещё как...
T>>этот код показывает, что ты ни разу правильно не написал тестового кода с использованием DI, правильно было бы так:
·>Такой код я писал, конечно. Но с тех пор кое-чему научился.
T>>>Container.Register<InMemoryProvider, DbProvider> ()
·>Это не DI, это контейнер. Разберись в конце-концов что такое DI.
так давай, покажи написанный на твоёй коленке DI без контейнера, мы его оценим