Реестры в TheCallingAssembly будут переопределены теми, которые вы зарегистрировали в Assembly1, 2 и т. Д.
Таким образом, если вы зарегистрируете ISomeInterface в каждой из этих сборок, по умолчанию будет использоваться сборка в Assembly3. Те, которые зарегистрированы в других сборках, вы можете получить из Structuremap, вызвав
container.GetAllInstances<ISomeInterface>();
Это вернет IList всех зарегистрированных ISomeInterface в Structuremap.
Если вы хотите переопределить те, которые вы получаете при сканировании, вам по какой-то причине необходимо заново настроить контейнер. Если вы этого не сделаете, по умолчанию используется последний тип сканирования.
В этом примере по умолчанию используется ISomeInterface, зарегистрированный в Assembly1. Когда вы смотрите на код, можно поверить, что SomeOtherClass используется по умолчанию. Но на самом деле именно тот, который зарегистрирован в Assembly1, является значением по умолчанию.
var container = new Container(x => {
x.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.Assembly("Assembly1");
scanner.LookForRegistries();
});
x.For<ISomeInterface>().Use<SomeOtherClass>();
});
Таким образом, чтобы переопределить сопоставления отсканированных сборок. Вы должны настроить контейнер снова, как в этом примере. Здесь SomeOtherClass является значением по умолчанию для ISomeInterface.
var container = new Container(x => {
x.Scan(scanner =>
{
scanner.TheCallingAssembly();
scanner.Assembly("Assembly1");
scanner.LookForRegistries();
});
});
container.Configure(x => x.For<ISomeInterface>().Use<SomeOtherClass>());