Предположим, что у нас есть IFoo, реализованный с помощью Foo, и IBar, реализованный с помощью FirstBar и SecondBar.
Использование этого соглашения регистрации:
container.Register(
AllTypes.FromThisAssembly().Pick()
.WithService.DefaultInterface())
] У нас будет три записи в контейнере:
IFoo = Foo
IBar = FirstBar
IBar = SecondBar
Теперь, как мы можем настроить эту регистрацию, чтобы иметь возможность сообщить контейнеру, что для IBar мы хотим зарегистрировать только SecondBar? Типа:
container.Register(
AllTypes.FromThisAssembly().Pick()
.WithService.DefaultInterface()
.For<IBar>().Select<SecondBar>())
Пример использования: у нас много служб в нашем приложении все зарегистрированы согласно соглашениям, однако некоторые из интерфейсов служб имеют две или более реализации (например, реальная реализация, поддельная реализация и тестовая реализация). Регистрация конвенции зарегистрирует их все в одном интерфейсе, и при разрешении интерфейса мы получим первую реализацию (в недетерминированном порядке). Мы хотим иметь возможность выбрать одну конкретную реализацию для этих сервисов при регистрации. Как мы можем это сделать?