Я играю с Ninject для простого тестового проекта дома, просто чтобы посмотреть, что я могу с ним сделать.В качестве отправной точки я создаю консольный исполнитель для некоторого сервиса, который принимает различные аргументы и в зависимости от того, что получает, использует те же методы, что и для свободного интерфейса, для настройки модели для запуска.
В качестве примера, предположим, у меня есть переключатель многословия, /o
./o
может быть передано как /o:quiet
, /o:normal
или /o:verbose
.Различные варианты говорят сами за себя.
Чтобы удовлетворить этот аргумент, я хотел бы присоединить различные реализации ILogger
- quiet получает тихий регистратор, который печатает только критические сообщения, normal получает обычный регистратор, а verbose получаетболтливый регистратор, который печатает все.
Я хотел бы сделать что-то в модуле, например:
Bind<ILogger>().To<QuietLogger>().When(VerbosityParameter=="quiet");
Bind<ILogger>().To<VerboseLogger>().When(VerbosityParameter=="verbose");
... и т. Д.
Я не вижу, как это сделатьчто-нибудь подобное;кажется, что все условные привязки зависят от состояния объекта инъекции.Какой в этом смысл?Разве это не разрушает всю точку внедрения зависимости, когда потребляющий класс должен точно определить все условия, необходимые для определения того, какой конкретный тип он получает?Почему я не могу просто сказать Ninject, что я хочу, и получить это?