我是IoC初學者,我正面臨着實現IoC依賴注入的嚴重問題。IoC依賴注入確定Ajax中的類
我有一個應用程序有2個數據源,數據可能來自Solr或從數據庫。我有2個頁面,庫存頁面,顯示經銷商的所有車輛,其中quickSearch引擎從Solr獲取查找,例如Make,Model,...並將其顯示在下拉列表中,第二個頁面是VehicleDetails,顯示特定車輛加上諸如Make,Model之類的查找,但數據應該來自DataBase。
我已經創建LookupServiceSolr和LookupServiceSQL實現一個接口ILookupService在CastleControllerFactory:
_Container.Register(Component.For<MCI.Services.ILookupService>().ImplementedBy(typeof(MCI.Services.LookupServiceSQL)).Named("LookupSQL"));
_Container.Register(Component.For<MCI.Services.ILookupService>().ImplementedBy(typeof(MCI.Services.LookupServiceSolr)).Named("LookupSolr"));
的InventoryController將使用LookupServiceSolr和VehicleDetailsController將使用LookupServiceSQL,所以我也註冊他們這樣說:
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.InventoryController>().ServiceOverrides(ServiceOverride.ForKey("LookupService").Eq("LookupSolr")).LifeStyle.Is(LifestyleType.Transient));
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.VehicleDetailsController>().ServiceOverrides(ServiceOverride.ForKey("LookupService").Eq("LookupSql")).LifeStyle.Is(LifestyleType.Transient));
和InventoryController和VehicleDetailsController的構造函數具有LookupService作爲參數,並且所有在運行時都正常工作,這意味着vehicleDetail sController將通過LookupServiceSQL實現LookupService,而InventoryController將通過LookupServiceSOlr實現LookupService。
我的問題如下: 1-我是否正確實施IoC依賴注入? 2 - 這是我的主要問題,如果我有LookupController具有IlookupService在構造和VehicleDetailsController具有LookupController在構造函數中,我這樣註冊他們在容器:
_Container.Register(Component.For<MCI.Services.ILookupService>().ImplementedBy(typeof(MCI.Services.LookupServiceSQL)).Named("LookupSQL"));
_Container.Register(Component.For<MCI.Services.ILookupService>().ImplementedBy(typeof(MCI.Services.LookupServiceSolr)).Named("LookupSolr"));
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.LookupController>().ServiceOverrides(ServiceOverride.ForKey("lookupService").Eq("LookupSolr")).Named("Vehicle").LifeStyle.Is(LifestyleType.Transient));
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.LookupController>().ServiceOverrides(ServiceOverride.ForKey("lookupService").Eq("LookupSQL")).Named("Details").LifeStyle.Is(LifestyleType.Transient));
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.InventoryController>().ServiceOverrides(ServiceOverride.ForKey("lookupController").Eq("Vehicle")).LifeStyle.Is(LifestyleType.Transient));
_Container.Register(Component.For<MCI.Presentation.Web.Controllers.VehicleDetailsController>().ServiceOverrides(ServiceOverride.ForKey("lookupController").Eq("Details")).LifeStyle.Is(LifestyleType.Transient));
所以實際上這是我的流量,它都工作正常: InventoryController - > LookupController - > LookupServiceSolr。 VehicleDetailsController - > LookupController - > LookupServiceSQL。
我的問題是,我有一個Ajax的帖子,make dropdownList會做一個ajax發佈更改並獲取基於make的模型,我想調用LookupController中的方法從視圖中立即離開視圖並且不傳遞通過知道我的lookupController有一個LookupServiceSQL的vehicleDetailsController,我想讓包裝器知道我想要LookupServiceSQL而不是LookupServiceSolr。 有沒有辦法做到這一點,或者有沒有不同的想法來解決這個問題?
請儘快獲得幫助。
由於提前, 阿拉
請正確格式化代碼片段。 –