Castle Windsor: есть ли способ переопределить идентификатор компонента? - PullRequest
1 голос
/ 10 июля 2009

У меня есть следующий бит регистрационного кода:

Component.For<IPublishingService>().ImplementedBy<UseStoredProcedureToPrintService>(),
Component.For<IConfirmationDialog<AutomatedTransaction>>().ImplementedBy<ShipmentConfirmationDialog>().Named("ShipmentConfirmationDialog"),
Component.For<IConfirmationService<AutomatedTransaction>>().ImplementedBy<SingleTransactionConfirmation>().ServiceOverrides(
    ServiceOverride.ForKey("shipmentDialog").Eq("ShipmentConfirmationDialog") ),

Появилось требование, согласно которому в некоторых случаях приложение должно вести себя несколько иначе. Отлично, подумал я, это именно то, для чего я использовал Castle Windsor для начала.

Итак, я написал свои новые компоненты и сначала зарегистрировал их. Например, я реализую IPublishingService по-другому и сначала регистрирую новую реализацию, чтобы она была разрешена по умолчанию, указанной выше. Однако проблема возникает в тех немногих случаях, когда у меня не было другого выбора, кроме как использовать идентификатор для подключения переопределений моих служб. Например, как мне перенаправить ServiceOverride для ShipmentConfirmationDialog, чтобы использовать мою новую реализацию SpecialCaseShipmentConfirmationDialog без изменения приведенного выше кода?

В замке Виндзор есть все виды механизмов, которые я не очень понимаю, например, переадресация и ActAs, которые, я надеюсь, дадут простой ответ.

1 Ответ

3 голосов
/ 11 июля 2009

Я бы сказал проще. Если это настраивается, поместите его в config (web.config / app.config), а затем просто загрузите идентификатор, используя ConfigurationManager.AppSettings["shipmentDialogToUse"];

Также помните, что свободный API регистрации - это не начало и не конец регистрации. У XML все еще есть время и место, где он является подходящим инструментом для работы.

...