Аргументы, переданные фабрике, не будут добавлены в контейнер - они будут использоваться только для удовлетворения зависимостей требуемого сервиса. Если вы хотите, чтобы эти аргументы были переданы другим зависимостям, вы должны взять на себя ответственность за это самостоятельно.
Общее эмпирическое правило о том, что ссылка на контейнер является плохой практикой, является правильным. Однако, как и все эмпирические правила, у него есть ограничения.
(Фактическая изменчивость Settings
не ясна из вашего вопроса, поэтому я предполагаю, что ваше подразумеваемое требование о том, что оно может изменяться неопределенным образом, является ключевым фактором здесь. Однако, отвечая на ваш вопрос о " какой подход вы бы предложили " трудно без правильного понимания реальной изменчивости Settings
)
i) С вашим текущим дизайном, так или иначе, вам нужно улучшить поведение контейнера, чтобы выполнить ваши требования, как объяснено, и, следовательно, вы должны получить доступ к контейнеру.
Как вы уже отметили, одним из решений будет использование пользовательских областей. Это обеспечивает большую гибкость в управлении жизненным циклом объекта, но делает утечку ссылки на контейнер довольно опасным способом. Чтобы избежать этого, вы можете инкапсулировать это, чтобы предотвратить утечку контейнера, и в итоге вы получите собственную фабрику и класс области действия партнера (который может быть просто IDisposable
, если речь идет о клиентах). В этом сценарии я рассматриваю это как расширение базовых функциональных возможностей контейнера, и поэтому практическое правило не применяется.
ii) Другим подходом было бы немного переосмыслить ваш дизайн и ввести некоторую косвенность в ссылку на Settings
. то есть вместо Handler
и Controller
, имеющих зависимость от Settings
, они могут иметь зависимость от SettingsProvider
. SettingsProvider
затем может быть добавлен в контейнер как единичный объект, и требуемая логика доступа к применяемому в настоящее время Settings
может управляться полностью независимо от контейнера.
(См. Это превосходное объяснение преимуществ фабрик в замке Виндзор для получения более подробной информации)