Именованные экземпляры и экземпляр по умолчанию в 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 в контейнере я вижу в следующем порядке:

Экземпляр регистратора Log4Net с именем «Log4Net»Экземпляр регистратора Log4Net с GUID для имени (насколько я могу судить, как и любой другой экземпляр по умолчанию)Экземпляр регистратора Mock с именем «Mock»

Однако отладка в операторе журналирования при вызове из контейнера без имени экземпляра приводит к использованию реализации Mock.

Есть ли способ добавить экземпляр по умолчанию к графу объектов, в то же время имея возможность добавлять именованные экземпляры впоследствии?

Ответы на вопрос(1)

Ваш ответ на вопрос