Замок Виндзор: Использование регистрации соглашения вместе с конкретными реализациями

Предположим, что у нас есть 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>())

Пример использования: у нас много служб в нашем приложении все зарегистрированы согласно соглашениям, однако некоторые из интерфейсов служб имеют две или более реализации (например, реальная реализация, поддельная реализация и тестовая реализация). Регистрация конвенции зарегистрирует их все в одном интерфейсе, и при разрешении интерфейса мы получим первую реализацию (в недетерминированном порядке). Мы хотим иметь возможность выбрать одну конкретную реализацию для этих сервисов при регистрации. Как мы можем это сделать?

5
задан Luke Girvin 3 June 2016 в 13:51
поделиться