В чем разница между AddConcreteType и TheDefaultIsConcreteType в StructureMap? - PullRequest
2 голосов
/ 27 сентября 2008

Я настраиваю StructureMap, и кажется, что все, что я хочу сделать, есть два способа сделать это, и мне неясно, в чем разница между ними. Например, в чем разница между этими двумя строками:

StructureMapConfiguration.ForRequestedType<IConsumer>().AddConcreteType<Consumer>();

StructureMapConfiguration.ForRequestedType<IConsumer>().TheDefaultIsConcreteType<Consumer>();

Аналогично, в чем разница между использованием AddInstanceOf и ForRequestedType?

1 Ответ

3 голосов
/ 04 октября 2008
StructureMapConfiguration.ForRequestedType<IConsumer>().AddConcreteType<Consumer>();

Этот метод добавит тип Consumer в качестве подключенного типа для IConsumer. Если для IConsumer нет других подключенных типов, тогда этот тип будет типом по умолчанию, возвращаемым, если запрашивается экземпляр IConsumer. В противном случае вам нужно будет получить этот экземпляр, используя конкретный ключ (по умолчанию это квалифицированное для сборки имя типа).

StructureMapConfiguration.ForRequestedType<IConsumer>().TheDefaultIsConcreteType<Consumer>();

Это работает аналогично AddConcreteType, за исключением того, что он также делает тип типом по умолчанию. Если в запросе IConsumer не указан конкретный ключ, этот тип будет возвращен.

Что касается разницы между AddInstanceOf и ForRequestedType, AddInstance of позволяет вам предоставить делегат, который будет обрабатывать создание экземпляра указанного типа. ForRequestedType предоставляет вам экземпляр CreatePluginFamilyExpression (или GenericFamilyExpression в случае ForRequestedType (Type t)), который позволяет вам свободно конфигурировать экземпляр.

...