После поиска многих статей о работе с базами данных я выяснил следующее:
Не используйте TheDefaultIsConcreteType, прежде чем обогатят. Это точно так же, как сделало бы его правильно после ForRequestedType (), который говорит, что Вы хотите обогатить весь ICommands. Используйте TheDefault. OfConcreteType вместо этого.
Также не удваивайтесь, Обогащают, это не объединяет в цепочку хорошо при замене экземпляров. Следующее должно работать на Ваш сценарий:
ForRequestedType<ICommand>()
.CacheBy(StructureMap.Attributes.InstanceScope.Singleton)
.TheDefault.Is.OfConcreteType<A>()
.EnrichWith(x => new DecoratorTwo(new DecoratorOne(x)));
InstanceOf<ICommand>().Is
.OfConcreteType<B>()
.EnrichWith(x => new DecoratorOne(x))
.WithName("second");
InstanceOf<ICommand>().Is
.OfConcreteType<MultiCommand>()
.TheArrayOf<ICommand>().Contains(y =>
{
y.TheDefault();
y.TheInstanceNamed("second");
})
.WithName("multi");