控制反转(IoC)与依赖注入(DI)
最近几天在?研究容器。发现有几个理念需要理一下。细一看,又发现根本就是我们之前学过的东西。控制反转(IoC)与依赖注入(DI)。这两个概念有很多相同的内容,只不过是侧重不相同。 控制反转 ??????? 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。 更通俗的说,就是本来你该做的事情 你不去做了 让系统去做。 我们举一个例子来说明,皇上生病了传御医。以前的做法是,皇上想叫哪一个大臣直接传旨召XX御医。而现在的做法就是这之间有了一个爱妃团。皇上只告诉爱妃团召御医。但是具体召哪一个御医,是由娘娘团决定的。很明显,整个事件的控制权掌握在了娘娘团手里。也就是我们说的控制反转(ICO)。 Demo ??????? ①皇上直接传御医 <span style="font-size:18px;">namespace DemoFactory{ public interface IDoctor//医生接口 { void GiveMedicine();//拿药 } public class Doctor : IDoctor { public void GiveMedicine() { Console.WriteLine("中草药"); } } } namespace SpringNewIoC { class Program { private static void NormalMethod() { IDoctor doc = new IDoctor(); doc.GiveMedicine(); Console.WriteLine("我是皇上叫过来的御医"); } } }</span> 这样的话,我们通过“IDoctor doc=new IDoctor() “?? 可知皇上一定要知道具体某个御医。 ②皇上通过爱妃团传御医。 <span style="font-size:18px;">namespace DaoFactory{ public static class wife { public static IDoctor CallDoctor() { return new Doctor(); } } namespace SpringNetIoC { class Program { private static void FactoryMethod() { IDoctor doc = wife.CallDoctor(); doc.GiveMedicine(); Console.WriteLine("我是娘娘团叫过来的御医"); } } } }</span> 有人说它是一种概念,也有人认为是一种设计模式。 那么依赖注入是什么意思呢?还是皇上通过娘娘叫御医。对爱妃团来说,她们把御医带给皇上。就相当于娘娘团把御医“注入”给皇上。 说到这大家千万不要觉得陌生,我们之前在设计模式的时候,这些都是已经接触过的。其实我上面写的demo?就是之前学过的一个简单的工厂方法而已。 此外,看网上的博客,他们实现IOC是通过配置文件来实现的。如下 <span style="font-size:18px;"><object id="Doctor" type="Dao.Doctor,Dao"/> </objects></span> <span style="font-size:18px;">private static void IoCMethod() { IApplicationContext ctx = ContextRegistry.GetContext(); IPersonDao dao = ctx.GetObject("Doctor") as IDoctor; if (dao != null) { dao.Save(); Console.WriteLine("我是IoC方法"); } }</span> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |