Ответ 1
Предостережение: я не использовал StructureMap в коммерческом проекте уже несколько лет. С тех пор ситуация может измениться, но ваш примерный код выглядит полностью знакомым, поэтому я предполагаю, что он не сильно изменился.
Единственная причина, по которой я знаю, где вы хотите одобрить одну из них, - это когда вы хотите явно определить соглашения (соглашения), которые будут использоваться для сопоставления конкретных реализаций с T
. Оба могут это сделать, но надежность реализации отличается.
Если вы используете ConnectImplementationsToTypesClosing<T>
, во время установки Scan()
вы передаете класс конвенции, который наследует от IRegistrationConvention
. Для меня, по крайней мере, это просто работало без каких-либо проблем.
AddAllTypesOf<T>
предположительно имеет аналогичную функциональность через ITypeScanner
, но на практике у нас были всевозможные странные проблемы с ним, такие как повторные регистрации типов, типы, которые не регистрируются, если они находятся в другом пространстве имен от T
, и часто не обнаруживают которые они должны были использовать. Эти проблемы все исчезли при использовании ConnectImplementationsToTypesClosing<T>
.
Если вы не пытаетесь сделать что-либо слишком умное, и для вас действуют соглашения по умолчанию, вы не заметите разницы между ними. Если вам нужно переопределить соглашения по умолчанию по какой-либо причине, я бы сильно поддержал ConnectImplementationsToTypesClosing<T>
.