以下代碼僅用於演示目的。Castle Windsor IOC:將構造函數參數傳遞給子組件
假設我有2個組件(businessService和dataService)和一個UI類。
UI類需要一個業務服務,businessService需要一個dataService,而dataService需要一個connectionString。
形式的UI類,我需要解決的業務服務,所以我寫了下面的代碼:
var service = container.Resolve<BusinessService>(new { dependancy = "con string 123" }));
通知,扶養是的connectionString構造函數的參數。
但上面的代碼不起作用,說dataService期待依賴性,這是不合格的。
無法創建組件「的DataService」 因爲它依賴是 滿意。 dataService正在等待 以下相關性:
鍵(具有特定鍵的組件) - 未註冊的依賴性。
因此,作爲一種解決辦法我這樣做:
var service = container.Resolve<BusinessService>(new { dataService = container.Resolve<IDataService>(new { dependancy = "123" }) });
但是從設計,編碼風格和許多觀點,這是不這樣做的一個很好的方式。
所以,如果你能告訴爲什麼它不以簡單的方式工作,或者你有更好的解決方法,請分享。
能否請您提供的BusinessService,DataService的一個簡短而完整的定義,和扶養/的connectionString會失敗?刪除不直接有助於重現問題的任何代碼。 – 2010-10-11 09:30:53
它的簡單和直接的 – 2010-10-11 10:46:53
公共類的BusinessService {公衆的BusinessService(DataService的DataService的){}} – 2010-10-11 10:48:23