我正在构建一个包含表示层(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,或者你使用晚期绑定。 –