我正在構建一個包含表示層(PL),業務邏輯層(BLL)和數據訪問層(DAL)的3層架構。
傳統的3層體系結構邏輯規定BLL應充當PL和DAL之間的中介。 PL甚至不應該意識到存在數據庫,而DAL不應該意識到存在BLL或PL。上述
傳統的3層架構vs 3層IOC
實現如下
- PL 項目會產生3種不同的物理項目之間的以下依賴性 - > BLL DLL
- BLL 項目的參考 - > DAL的參考DLL
- DAL 項目 - >編號
然而施加IOC的BLL和通過限定在BLL接口爲DAL實現和通過構造注射使用DI的DAL之間的概念將改變依賴如下
- PL 項目 - > BLL DLL,DLL DAL的參考(對於具體類型的DI到BLL對象的構造函數)
- BLL 幻燈的參考CT - >無參考
- DAL 項目 - > BLL DLL的引用(BLL實現的接口)
那麼,國際奧委會和衝突中傳統的3層?
理想情況下,我想通過DI維護我的IOC,同時實現以下目標。
- PL 項目 - > BLL DLL的參考
- BLL 項目 - >無參考
- DAL 項目 - > BLL DLL的參考
你是如何做到這一點的?
老問題,但我認爲這個其他的答案可以幫助:http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-在進入應用程序。基本上,你不希望你的BLL引用DAL,而是使用你的IoC容器注入它。因此,你的組合根(應用程序入口點,可能在PL項目中)會引用所有的DLL,或者你使用晚期綁定。 –