我的ASP.NET MVC 2控制器當前通過傳遞由Castle Windsor實例化的存儲庫實例在其構造函數中實例化服務對象。我有單元測試,在將存儲庫的Moq實例傳遞給控制器的構造函數後調用控制器動作。ASP.NET MVC消費WCF
我想允許第三方UI通過WCF訪問這些服務對象。
我發現把我現有的服務層轉換成Web服務,甚至在UI和現有服務層之間添加一個新的Web服務層將會破壞我的單元測試,除非我找到彌合這種差距的方法。
我試圖找出一個解決方案,其中我的UI是根據服務層的接口進行編碼的(現在已經是這樣),我可以使用DI在運行時傳遞Web服務實現,並在現有實現期間傳遞單元測試。 Web服務實現只需調用現有的實現。
問題:
- 是這樣的做法可取/可能嗎?
- 在教程或開源項目中是否有這樣的例子?
編輯:
我相信我有一個可行的解決方案現在多虧了下面的建議。我創建了一個WCF服務應用程序,它使用我的域模型中的現有服務接口。 WCF實現是一個類,構造函數從Ninject的WCF extension獲取存儲庫實例,並從域模型創建服務實例。 WCF中的每個方法/函數都只是從現有的服務層調用相同的方法/函數。
有一些注意事項。例如,當我在控制器中創建服務時(實際上,我使用Ninject創建WCF服務的實例並將其提供給控制器的構造函數),我無法再傳遞對ASP.NET MVC ModelState的引用。原因在於WCF是一個消息傳遞平臺 - 每次調用都必須明確傳達更改(即,我的驗證錯誤現在作爲各個函數/方法的參考參數傳回)。
我還必須添加一些序列化/ servicemodel引用到我以前的POCO Core項目。
另外,我從Castle轉換到Ninject,因爲Castle's WCF solution的成熟度很低,我當時並不習慣使用它。
我認爲這是不可行的,但我會給它一個鏡頭,看看它是如何工作的。你真的託管你的WCF服務,並針對託管服務運行你的單元測試嗎? – Mayo 2010-12-22 20:00:29