Зачем использовать параметр ключа при вызове AddComponent для WindsorContainer? - PullRequest
3 голосов
/ 22 января 2009

Метод AddComponent в интерфейсе IWindsorContainer имеет несколько перегрузок, например:

WindsorContainer.AddComponent<I,T>()

и

WindsorContainer.AddComponent<I,T>(string key)

Какой смысл использовать параметр ключа и зачем его использовать?

Ответы [ 2 ]

4 голосов
/ 22 января 2009

Вы бы использовали параметр key, если вы зарегистрировали несколько реализаций одного и того же интерфейса. Таким образом, вы можете позже получить конкретный. Например, у меня может быть несколько версий IHandler.

container.AddComponent<IHandler, FileHandler>("handlers.file");
container.AddComponent<IHandler, HttpHandler>("handlers.http");
//I can retrieve the first one like this (or something like this).
IHandler fileHandler = container.Resolve<IHandler>();
//I can retrieve the http handler like this 
IHandler httpHandler = container.Resolve<IHandler>("handlers.http");

Кроме того, когда вы регистрируете компонент без ключа, я считаю, что его тип используется в качестве ключа.

container.AddComponent<IHandler, FileHandler>();

Я считаю, что это зарегистрировано с ключом "{Namespace} .IHandler". Таким образом, он может быть получен позже с помощью автоматического ключа.

Надеюсь, это поможет.

1 голос
/ 23 января 2009

Наконец-то нашел его где-то в документации.

На полпути на этой странице они говорят

Обратите внимание, что для одной и той же службы можно добавить более одной реализации. В этом случае при запросе компонента службой будет возвращен первый компонент, зарегистрированный для этой службы. Чтобы получить другие реализации для того же сервиса, вы должны использовать ключ.

...