Castle Windsor:有没有办法覆盖组件ID?

时间:2009-07-10 19:41:36

标签: inversion-of-control castle-windsor registration

我有以下注册码:

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并首先注册新实现,以便通过上面的默认实现解析它。但是,在少数几种情况下我会发现问题,除了使用id来连接我的服务覆盖。例如,如何重定向ShipmentConfirmationDialog的ServiceOverride以使用我的新SpecialCaseShipmentConfirmationDialog实现而不修改上面的代码位?

在温莎城堡中有各种各样的机制,我不太喜欢转发和ActAs,我希望能提供一个简单的答案。

1 个答案:

答案 0 :(得分:3)

我会保持简单。如果它是可配置的,请将其放入配置(web.config / app.config),然后使用ConfigurationManager.AppSettings["shipmentDialogToUse"];

加载ID

还要记住,流畅的注册API并不是注册的全部和最终目的。 XML仍然有时间和地点,它是适合工作的正确工具。