假设MVC项目中需要用Ioc框架(如Unity),据说这样可以实现解耦。
以数据层(DAL)来说,Ioc在Global文件中注入时,表现层(UI)需要引用数据层接口(IDAL),还需要引用数据层(DAL),这怎么又解耦了呢?
以业务层(BLL)来说,Ioc在Global文件中注入时,表现层(UI)需要引用业务层接口(IBLL),还需要引用业务层(BLL),这怎么又解耦了呢?
我的想法是 UI只需要引入IBLL就行了,不需要其他的DAL IDAL BLL什么的,但是Global文件注册时需要IDAL DAL IBLL BLL这些东西,在Ioc的前提下我该如何组织这些东西呢?
求指教在这些情况下如何组织项目结构。
将IoC注册代码移至一个独立的项目中。
我写过一篇ASP.NET MVC中使用IoC的博客:想爱容易,相处难:当ASP.NET MVC爱上IoC
我们现在就是在CNBlogs.BootStrapper项目中进行所有IoC注册,这样其他项目只需要依赖接口,不依赖实现。
我现在的情况是MVC表现层引用了DAL类库 IDAL接口类库 BLL类库 IBLL接口类库,感觉这样非但没有解耦,耦合反而更大了,配置文件这么写的
<unity>
<containers>
<container>
<register type="TreeDemo.IService.IMenuService,TreeDemo.IService" mapTo="TreeDemo.Service.MenuService,TreeDemo.Service"/>
<register type="TreeDemo.IDal.IMenuDal,TreeDemo.IDal" mapTo="TreeDemo.Dal.MenuDal,TreeDemo.Dal"/>
</container>
</containers>
</unity>
不引用就会提示找不到程序集,郁闷啊。。求一个组织方式,你能否讲具体点呢?
我试了下,在一个新的类库(Test)中引用DAL IDAL BLL IBLL,然后Web层去引用Test类库,这样确实可以实现,那要是我DAL层要换实现的方式了,那Test类库还要去引用新的DAL,那不还是没解耦么?
原来这么写就怎么写,然后再配置IOC,没必要为了IOC去改变你或团队现有的习惯,学习成本会增加的,项目风险也高了
应该是不需要引入实现层,写到配置文件,然后用反射来实例化?
以前当没使用ioc的时候,我们如果想要对象,是不是直接new出来,或者反射来的(当然ioc还是利用了反射哈)?
1 当使用ioc,我们只需要配置好,直接在配置文件中修改,这样有益于扩展,不会去修改源码;
2 new出来的,就固定在,使用ioc是当需要才注入,不需要就不存在对象;
希望有帮助哈,个人理解,先不谈层次,之谈ioc