Именованные экземпляры и экземпляр по умолчанию в StructureMap?
В моем коде начальной загрузки StructureMap я использую пользовательское соглашение для сканирования сборок и добавления пар интерфейса / реализации в граф объектов в качестве именованных экземпляров. По сути, у меня есть некоторая логика, которая проверяет настройки конфигурации и детализирует это утверждение в зависимости от различных условий:
registry.For(interfaceType).Use(type)
.Named(implementationName);
Это добавляет все названные экземпляры достаточно хорошо. Однако я также хотел бы добавить экземпляр по умолчанию, если имя экземпляра не указано. Однако экземпляр по умолчанию не всегда является последним, добавленным к графику. Иногда другие именованные экземпляры добавляются позже во время сканирования. Однако может показаться, что любой экземпляр, добавленный последним, независимо от того, назван он или нет, всегда используется по умолчанию.
Я пробовал различные комбинации свободного API, в том числе:
registry.For(interfaceType).Add(type);
или же:
registry.For(interfaceType).Use(type);
Даже некоторые из них помечены как устаревшие. Но результирующее поведение всегда таково, что последний является значением по умолчанию. Так что, если порядок добавления реализаций примерно такой:
Для интерфейса Logger используйте реализацию Log4Net с именем «Log4Net»Для интерфейса Logger по умолчанию используйте реализацию Log4NetДля интерфейса Logger используйте реализацию Mock с именем «Mock»В результате получается, что реализация «Mock» используется по умолчанию, когда имя не указано. Отладка вAllInstances
в контейнере я вижу в следующем порядке:
Однако отладка в операторе журналирования при вызове из контейнера без имени экземпляра приводит к использованию реализации Mock.
Есть ли способ добавить экземпляр по умолчанию к графу объектов, в то же время имея возможность добавлять именованные экземпляры впоследствии?