Я использую инфраструктуру Unity для добавления ConfigurationProvider в некоторые из моих классов через следующий интерфейс:
interface IConfigurationProvider<T>{
T GetConfiguration();
}
затем, в моем загрузчике с Unity,
container.RegisterType(typeof (IConfigurationProvider<DongleConfiguration>),
typeof (DongleConfigurationProvider));
До сих пор это была хорошая стратегия, которая позволила мне определить разных провайдеров конфигурации для различных реализаций и тестов.Теперь я хотел бы, чтобы один из провайдеров использовал аргументы командной строки для настройки объекта конфигурации, который требует от меня передачи параметра args
в ctor:
class ProblematicConfigurationProvider : IConfigurationProvider<ProblematicConfiguration> {
...
public ProblematicConfigurationProvider(string[] args) { ... }
...
}
Я прочиталчто я могу использовать ParameterOverride
для предоставления необязательного аргумента ctor следующим образом:
var configObj = container.Resolve<IConfigurationProvider<ProblematicConfiguration>>(new ParameterOverride("args", args));
Тем не менее, я использую DI "полностью" и полагаюсь на контейнер для разрешения зависимостей вниз по линии после разрешенияRootObject
или каков мой класс высшего уровня.У меня вопрос, как теперь я могу использовать объект configObj
, который я только что разрешил, если он спрятан где-то глубоко в моем графике зависимостей?Как я могу использовать разрешенный объект в другом вызове Resolve
?Будет ли через аналогичное использование ParameterOverride
?Есть ли способ где-нибудь настроить переопределение параметров и заставить Unity использовать его без фактического создания configObj
?