看了很多文章,千篇一律全是 解释什么是 依赖注入 什么是控制反转,都说是为了解耦,但是并没有说 优势 怎么解耦法。
有的人说因为 面相接口编程 所以要用到。
但是很多开源项目里 一个接口只有一个实现 需要什么依赖注入 需要啥容器去反转,还不如直接new。。。感觉不出优势。
感觉大部分都是依葫芦画瓢,别人用了 autofac 或者 unity 我也就要用。
补充一下 很多 开源项目这样写
接口 IxxxBLL 然后业务层 xxxBLL: IxxxBLL
然后用第3方工具 注入到容器
然后再需要的地方 比如 controller
IxxxBLL xx;
xxx(IxxxBLL yy)
{
xx = yy;
}
不明白 我直接new 跟你这有啥区别。。。别说什么 要遵守 依赖倒置这些。。。就问 有啥优势。
理解的不深,请赐教。谢谢各位!
慢慢来吧.网上那些文章看着是觉得有道理.
然后依照着做发现真是S-B.然后慢慢就自己总结出一套理解.
ioc用配置文件写个要注入的类名的都是新手/菜鸟/误人子弟,
想对IOC有深刻理解.推荐看Orchard项目.非常非常牛逼.
要理解ioc有2个要点.一个是解耦.一个是对象生命周期管理.
第一个新手已经很难理解.第二个老手都没几个有概念.所以大部分吹ioc的人其实都不懂ioc到底怎么用才好.
xiexie 回复。
很多情况下这个东西毫无用处,不要因概念而概念。
反射创建和new创建你说说又什么区别,只不过它要解决比如作用域等问题,因此又会产生不同的函数和参数。
适当的配置我认为好的code;过度的配置那不如直接放在代码中,尤其那些在自己应用中根本不需要参数化的配置。
谢谢回复
用不用,都行。
个人理解的IoC解耦。
Controller IService Service
具体实现在 Service ,但是 Controller 只需要依赖 IService,不依赖于具体实现。
IOC,依赖注入,和new一个对象确实比较像,但是IOC是单例的,IOC的对象是放在容器中的,可以直接拿来使用,节约了对象创建以及销毁的时间,而且单例也有很多其他的好处.