Основные механизмы выбора между различными реализациями будут через
- именованный экземпляр
- выбор определенной зависимости ctor
- условное выражение в StructureMap.
Вы не можете указать 2 значения по умолчанию для данного типа (что должно быть очевидным), но вы можете назвать экземпляр и сказать, при каких обстоятельствах вы хотите его использовать.
Именованный экземпляр определен, например, как это:
InstanceOf<IApplicationModule>()
.Is.OfConcreteType<BusinessProcessSupport>()
.WithName("BusinessProcessSupport");
Вот пример, где именованный экземпляр используется для выполнения определенной зависимости ctor:
ForRequestedType<MenuStripModule>()
.CacheBy(InstanceScope.Singleton)
.TheDefault.Is.OfConcreteType<MenuStripModule>()
.CtorDependency<ICommandInfoProvider>()
.Is(i => i.TheInstanceNamed("Functions"));
И, наконец, вы можете взглянуть здесь на (несколько неприятное) выражение StructureMap, которое использует условные возможности: http://realfiction.net/Content/Entry/142
Обратите внимание, что вы используете синтаксис StructureMap 2.5. *. 2.6. * Отсутствует, что изменило грамматику конфигурации, чтобы сделать ее более краткой и понятной.