我有註冊碼以下位:Castle Windsor:有沒有辦法重寫組件ID?
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")),
一個要求下來,在某些情況下,應用程序應該表現有所不同的線路。偉大的我想,這正是我使用溫莎城堡開始。
所以我寫了我的新組件,我先註冊了它們。例如,我以不同的方式實現IPublishingService,並首先註冊新實現,以便通過上面的默認實現進行解析。然而,在少數情況下,我沒有選擇,只能使用ID來連接服務覆蓋。例如,我如何重定向ShipmentConfirmationDialog的ServiceOverride以使用我的新SpecialCaseShipmentConfirmationDialog實現而不修改上面的代碼位?
城堡windsor有各種各樣的機制,我不像轉發和ActAs我真正理解,我希望將提供一個簡單的答案。
當您需要對已部署的應用程序進行更改時,我認爲它是正確的工具。否則,只需將所有註冊都註冊到註冊服務商類中,並添加一個簡單的動態發現機制,即可找到註冊服務商所有本地dll。 在我的情況下,我有一個應用程序,可以部署對2個非常不同的數據庫,所以我需要部署它與不同的模型翻譯層和幾個不同的UI屏幕。由於所有的配置都是部署時間,我不明白爲什麼xml配置是必要的(儘管我也允許)。 點雖然。仍然太糟糕了,沒有覆蓋機制。 – 2009-07-11 21:21:13