2012-06-05 70 views
0

我們有以下解決方案佈局:SOA問題:WCF +依賴注入

  • 數據訪問
  • 業務邏輯
  • WCF服務
  • MVC

我們選擇有一個WCF服務層,因爲將來會有其他應用程序使用相同的邏輯。這被認爲是SOA。

的DA,BL和WCF層我傾向於使用依賴注入,因爲我想單元測試業務邏輯等..之間

但現在我的問題是:我應該使用依賴注入的WCF呢?我的意思是,我應該通過應用程序(消費者)的WCF服務傳遞依賴關係嗎?就我個人而言,我覺得這很奇怪,因爲它對我來說不再是SOA了?

誰能幫助我嗎?

+0

看看[這個答案](http://stackoverflow.com/a/10699539/264697)。它會給你一些關於如何編寫一個無需維護的DI友好的WCF服務的指針。 – Steven

回答

1

我應該從應用程序傳遞WCF服務 的依賴關係嗎?

我想你的意思是WCF服務的消費者的應用程序的權利?我相信從應用程序(MVC)你正在通過代理與服務層交談。你不應該從消費者應用程序注入依賴到WCF服務,你不能這樣做。

但是,您可以使用WCF中的依賴注入來創建自定義服務主機工廠,從而在服務端本身中注入數據/日誌記錄組件以更好地進行單元測試。

http://prideparrot.com/blog/archive/2012/2/dependency_injection_in_wcf_using_castle_windsor

1

可能會挑剔,但使用服務並不一定意味着SOA。

這樣,我們爲什麼需要從應用程序傳遞依賴關係?您可以在主機上撰寫您的服務,如here所示。

+0

謝謝你的回答。我仍然有一些問題..如果我使用您給我的鏈接中的解決方案,我仍然可以使用「常規服務參考」方法來實現這些服務嗎? – bjornruysen

+0

是的,添加服務引用僅創建一個代理客戶端來與服務對話。代理不受服務注入的影響。 –

1

如果你想單元測試業務邏輯,你甚至可以爲它們聲明不同的端點,然後在你的單元測試中消耗,這是依賴注入的替代。如果你真的想使用依賴注入,那麼總是建議在服務級別上進行,而不是在客戶端上進行,但如果從客戶端使用它,仍然沒有什麼壞處。 如果我會給出選擇,那麼我會在服務類中完成它,並從客戶端我可以得到一個參數,這將建議您是否使用它進行單元測試或應用程序已經打電話給您的WCF服務。

+0

謝謝!因此,在服務級別執行此操作時,意思是我不應該通過WCF傳遞依賴關係? – bjornruysen

+0

是的,我的理由不這樣做,是因爲如果將來你想改變你的測試工具,那麼你必須依賴注入再次代碼中,就好像它在服務器端就可以節省時間的代碼部分。 – Deepesh

+0

似乎完全合理,謝謝 – bjornruysen