Это действительно довольно просто:
Отделите код, который «связывает» объекты в вашем приложении от классов, которые фактически «являются» вашим приложением.
Другими словами, фундаментальное архитектурное понятие, которому вы должны следовать, - это изолировать весь код, который вызывает ключевое слово «new» или статические методы, от кода, который содержит логику бизнеса или приложения.
ОТДЕЛЬНЫЙ КОД, КОТОРЫЙ УСТАНАВЛИВАЕТ ОБЪЕКТЫ ОТ КОДА, КОТОРЫЙ ВЫЗЫВАЕТ МЕТОДЫ НА ЭТИХ ОБЪЕКТАХ !!
Извините за крик, но если вы будете следовать этому правилу, вы получите слабосвязанный, легко тестируемый код, который является точкой IoC и DI - независимо от того, какую платформу вы используете. Вам может даже не понадобиться каркас вообще!
У парня по имени Миско Хевери есть хороший блог на эту тему.
Блог Миско Хевери
Артикул