所以我有一個分層的應用程序,我在其上添加了一個WCF服務接口。該服務僅僅是一個外觀,其業務邏輯已經存在於商業邏輯層(BLL)中的Business Objects(BO)中,該BLL是一個類庫。在BLL中,我們使用構造器注入來向BO中注入依賴關係。這一切都與良好的單元測試等工作。對問題...帶有依賴注入的WCF數據契約設計
通常,我只需創建一組請求/響應對象作爲DataContracts爲每個服務方法與適當的操作屬性。如果操作需要我們的一個「實體」傳遞給方法或從方法傳遞,我只需定義一個該類型的屬性,一切都會好的(我們所有的BO都是可序列化的)。然而,當這些「實體」中的一個被傳入服務方法時,WCF將對象反序列化,而不會調用我們定義的構造函數,因此,依賴關係不會解析。
我們使用服務方法的情況,稱爲CreateSomething。我通常喜歡用簽名將此定義爲服務操作:
CreateSomethingResponse CreateSomething(CreateSomethingRequest request);
CreateSomethingRequest將是一個DataContract,已位居其屬性類型的屬性東西那代表的「實體」被傳遞到服務。 在這種情況下,這是一個業務對象,當實例化時,這個業務對象預期會從DI容器接收實例 - 正如我上面所說的,當WCF反序列化服務器上的對象時,不會發生這種情況。
選項#2是從DataContract刪除東西屬性,並以我DataContract明確定義每個屬性,然後我的服務方法內,創建東西類的新實例,讓容器注入依賴關係,然後將來自DataContract對象的屬性值映射到BO中。我當然可以這樣做,但是我擔心現在有兩個地方可以進行更改,例如,如果我想將屬性添加到Something類型。而且,由於很多屬性,代碼重複很多。
有沒有人跨過這座橋,如果有的話,你能分享一下你的想法,以及你在自己的應用程序中是如何處理這種情況的?謝謝!!!