Здравствуйте, takTak, Вы писали:
T>>>все разговоры в этой теме от банального непонимания, для чего придумали DI / IoC
T>·>Это верно.
T>·>А придумали контейнеры для сборки монструозных монолитных enterprise приложений из крупных отдельно поставляемых компонент, плагинной архитектуры, внутри так называемых application servers.
T>
о чём ты вообще? идея юнит-тестирования намного старше веб-серверов...
"веб-сервер" я не говорил, не приписывай мне ложные высказывания.
Для юнит-тестирования контейнер не нужен тоже, чаще даже вреден. Нужен DI.
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>·>...
Ты предлагаешь посылать письма и писать файлы из тестов? Особенно весело бороться в тестах с многопоточкой. Нет, в тестахм добрая половина этих зависимостей будут тестовые реализации.
А для второй половины — если же ты хочешь потестировать
интеграцию 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.