В большом приложении я всегда нахожу, что мне нужно 3 зависимости только для доступа к инфраструктуре (примеры - ведение журнала, конфигурация, постоянство)
imho инфраструктура не является зависимостями. У меня нет проблем с использованием сервис-локатора для получения регистратора (private ILogger _logger = LogManager.GetLogger()
).
Однако, на мой взгляд, настойчивость не является инфраструктурой. Это зависимость. Разбейте свой класс на более мелкие части.
Рефакторинг может добавить к этой проблеме.
Конечно. Вы получите больше зависимостей, пока не проведете успешный рефакторинг всех классов. Просто повесьте там и продолжайте рефакторинг.
Создавайте интерфейсы в отдельном проекте (разделенный шаблон интерфейса) вместо добавления зависимостей к классам.
В одном конкретном примере у меня есть класс, отвечающий за запуск различных функций через систему каждые несколько минут. Поскольку все функции по праву принадлежат разным областям, этот класс имеет множество зависимостей, чтобы иметь возможность выполнять каждую функцию.
Тогда вы выбираете неправильный подход. Исполнитель задач не должен зависеть от всех задач, которые должны выполняться, он должен быть наоборот. Все задачи должны быть зарегистрированы в бегун.
Как только я использую IoC в приложении, создается впечатление, что почти каждый созданный мной класс, который используется другим классом, в конечном итоге регистрируется и / или внедряется контейнером. *
Я регистрирую все, кроме бизнес-объектов, DTO и т. Д. В моем контейнере.
Я выполнил инициализацию всех контейнеров при запуске приложения, зарегистрировав типы для каждого интерфейса в системе. Некоторые представляют собой целенаправленные жизненные циклы одного экземпляра, где другие могут быть новыми экземплярами каждый раз, когда они разрешаются. Однако, поскольку последние являются зависимостями первого, на практике они тоже становятся единым экземпляром, поскольку они разрешаются только один раз - во время создания одного экземпляра.
Не смешивайте жизни, если вы можете избежать этого. Или не принимайте краткосрочные зависимости. В этом случае вы можете использовать простое решение для обмена сообщениями для обновления отдельных экземпляров.
Возможно, вы захотите прочитать мои рекомендации .