当前位置: 首页 > news >正文

站长源码之家wordpress怎么开发文档

站长源码之家,wordpress怎么开发文档,企业app商城开发网站建设,注销网站和取消接入IOC:英文全称#xff1a;Inversion of Control#xff0c;中文名称#xff1a;控制反转#xff0c;它还有个名字叫依赖注入#xff08;Dependency Injection#xff09;。 作用#xff1a;将各层的对象以松耦合的方式组织在一起#xff0c;解耦#xff0c;各层对象的调… IOC:英文全称Inversion of Control中文名称控制反转它还有个名字叫依赖注入Dependency Injection。 作用将各层的对象以松耦合的方式组织在一起解耦各层对象的调用完全面向接口。当系统重构的时候代码的改写量将大大减少。 理解依赖注入     当一个类的实例需要另一个类的实例协助时在传统的程序设计过程中通常有调用者来创建被调用者的实例。然而采用依赖注入的方式创建被调用者的工作不再由调用者来完成因此叫控制反转创建被调用者的实例的工作由IOC容器来完成然后注入调用者因此也称为依赖注入。 举个有意思的例子来源于互联网 假如我们要设计一个Girl和一个Boy类其中Girl有Kiss方法即Girl想要Kiss一个Boy首先问题是Girl如何认识Boy在我们中国常见的MM认识GG的方式有以下几种A 青梅竹马    B 亲友介绍   C 父母包办哪一种是最好的1.青梅竹马很久很久以前有个有钱的地主家的一闺女叫Lily她老爸把她许配给县太爷的儿子Jimmy属于指腹为婚Lily非常喜欢kiss,但是只能kiss Jimmy public class Lily{           public Jimmy jimmy;            public Girl()           {               jimmynew Jimmy();           }           public void Kiss()           {               jimmy.Kiss();           }       }          public class Jimmy       {           public void Kiss()           {               Console.WriteLine(kissing);           }       }   这样导致Lily对Jimmy的依赖性非常强紧耦合。 2.亲友介绍经常Kiss同一个人令Lily有些厌恶了她想尝试新人于是与Jimmy分手了通过亲朋好友中间人来介绍 public class Lily{           public Boy boy;               public Girl()           {               boyBoyFactory.createBoy();           }           public void Kiss()           {               boy.Kiss();           }       }   亲友介绍固然是好。如果不满意尽管另外换一个好了。但是亲友BoyFactory经常是以Singleton的形式出现不然就是存在于Globals无处不在无处不能。实在是太繁琐了一点不够灵活。我为什么一定要这个亲友掺和进来呢为什么一定要付给她介绍费呢万一最好的朋友爱上了我的男朋友呢 3.父母包办一切交给父母自己不用非吹灰之力Lily在家只Kiss public class Lily{           public Boy boy;            public Girl(Boy boy)           {               this.boyboy;           }           public void Kiss()           {               this.boy.Kiss();           }       }   Well这是对Girl最好的方法只要想办法贿赂了Girl的父母并把Boy交给他。那么我们就可以轻松的和Girl来Kiss了。看来几千年传统的父母之命还真是有用哦。至少Boy和Girl不用自己瞎忙乎了。这就是IOC将对象的创建和获取提取到外部。由外部容器提供需要的组件。 在设计模式中我们应该还知道依赖倒转原则应是面向接口编程而不是面向功能实现好处是多实现可以任意切换我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话还可以kiss可爱的kitten和慈祥的grandmother 好在.net中微软有一个轻量级的IoC框架Unity支持构造器注入属性注入方法注入如下图所示 具体使用方法如下图所示 using System;      using Microsoft.Practices.Unity;         namespace ConsoleApplication9   {       class Program       {           static void Main(string[] args)           {               //创建容器               IUnityContainer containernew UnityContainer();               //注册映射               container.RegisterTypeIKiss, Boy();               //得到Boy的实例               var boy  container.ResolveIKiss();                             Lily lily  new Lily(boy);               lily.kiss();           }       }             public interface IKiss       {           void kiss();       }                 public class Lily:IKiss       {              public IKiss boy;               public Lily(IKiss boy)           {               this.boyboy;           }           public void kiss()           {               boy.kiss();               Console.WriteLine(lily kissing);           }       }          public class Boy : IKiss       {           public void kiss()           {               Console.WriteLine(boy kissing);           }       }   }   如果采用配置文件注册的话 ?xml version1.0 encodingutf-8 ?   configuration     configSections       section nameunity typeMicrosoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration/     /configSections     unity       containers         container namedefaultContainer           register type命名空间.接口类型1,命名空间 mapTo命名空间.实现类型1,命名空间 /           register type命名空间.接口类型2,命名空间 mapTo命名空间.实现类型2,命名空间 /         /container       /containers     /unity   /configuration   配置的后台代码 UnityConfigurationSection configuration  ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)               as UnityConfigurationSection;   configuration.Configure(container, defaultContainer);   可以通过方法ResolveAll来得到所有注册对象的实例 var Instances  container.ResolveIKiss(); Martin Fowler在那篇著名的文章《Inversion of Control Containers and the Dependency Injection pattern》中将具体依赖注入划分为三种形式即构造器注入、属性设置注入和接口注入,习惯将其划分为一种类型匹配和三种注入 类型匹配Type Matching虽然我们通过接口或者抽象类来进行服务调用但是服务本身还是实现在某个具体的服务类型中这就需要某个类型注册机制来解决服务接口和服务类型之间的匹配关系构造器注入Constructor InjectionIoC容器会智能地选择选择和调用适合的构造函数以创建依赖的对象。如果被选择的构造函数具有相应的参数IoC容器在调用构造函数之前解析注册的依赖关系并自行获得相应参数对象属性注入Property Injection如果需要使用到被依赖对象的某个属性在被依赖对象被创建之后IoC容器会自动初始化该属性方法注入Method Injection如果被依赖对象需要调用某个方法进行相应的初始化在该对象创建之后IoC容器会自动调用该方法。 我们创建一个控制台程序定义如下几个接口IA、IB、IC和ID和它们各自的实现类A、B、C、D。在类型A中定义了3个属性B、C和D其类型分别为接口IB、IC和ID。其中属性B在构在函数中被初始化意味着它会以构造器注入的方式被初始化属性C上应用了DependencyAttribute特性意味着这是一个需要以属性注入方式被初始化的依赖属性属性D则通过方法Initialize初始化该方法上应用了特性InjectionMethodAttribute意味着这是一个注入方法在A对象被IoC容器创建的时候会被自动调用。 public interface IA { }       public interface IB { }       public interface IC { }       public interface ID { }          public class A : IA       {           public IB B { get; set; }           [Dependency]           public IC C { get; set; }           public ID D { get; set; }              public A(IB b)           {               this.B  b;           }           [InjectionMethod]           public void Initalize(ID d)           {               this.D  d;           }       }       public class B : IB { }       public class C : IC { }       public class D : ID { }   然后我们为该应用添加一个配置文件并定义如下一段关于Unity的配置。这段配置定义了一个名称为defaultContainer的Unity容器并在其中完成了上面定义的接口和对应实现类之间映射的类型匹配。 ?xml version1.0 encodingutf-8 ?   configuration     configSections       section nameunity typeMicrosoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration/     /configSections     unity       containers         container namedefaultContainer           register typeUnityDemo.IA,UnityDemo mapToUnityDemo.A, UnityDemo/           register typeUnityDemo.IB,UnityDemo mapToUnityDemo.B, UnityDemo/           register typeUnityDemo.IC,UnityDemo mapToUnityDemo.C, UnityDemo/           register typeUnityDemo.ID,UnityDemo mapToUnityDemo.D, UnityDemo/         /container       /containers     /unity   /configuration   最后在Main方法中创建一个代表IoC容器的UnityContainer对象并加载配置信息对其进行初始化。然后调用它的泛型的Resolve方法创建一个实现了泛型接口IA的对象。最后将返回对象转变成类型A并检验其B、C和D属性是否是空 class Program       {           static void Main(string[] args)           {               UnityContainer container  new UnityContainer();               UnityConfigurationSection configuration  ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) as UnityConfigurationSection;               configuration.Configure(container, defaultContainer);               A a  container.ResolveIA() as A;               if (null!a)               {                   Console.WriteLine(a.Bnull?{0},a.Bnull?Yes:No);                   Console.WriteLine(a.Cnull?{0}, a.C  null ? Yes : No);                   Console.WriteLine(a.Dnull?{0}, a.D  null ? Yes : No);               }           }       }   从如下给出的执行结果我们可以得到这样的结论通过ResolveIA方法返回的是一个类型为A的对象该对象的三个属性被进行了有效的初始化。这个简单的程序分别体现了接口注入通过相应的接口根据配置解析出相应的实现类型、构造器注入属性B、属性注入属性C和方法注入属性D a.B null ? No a.C null ? No a.D null ? No
http://www.huolong8.cn/news/252613/

相关文章:

  • 朱子网站建设沈阳网站建设成创
  • 做网站要几个部门组成所有网站排名2015年
  • 北京做网站设计公司住房和城乡建设部令第37号
  • 洛江区建设局网站建网站报价 优帮云
  • 珠海网站建立wordpress网站运行时间代码
  • 网站开发定义名称网站建设实验报告模板
  • 在线推广企业网站的方法是网页制作培训的课程
  • 学科建设网站绵阳网站建设设计
  • oss做网站烟台互联网公司
  • 如何制作动漫网站模板下载云服务器网站崩溃的原因
  • 网站优化有前途吗自学网官网
  • wordpress 简洁博客湖南seo推广公司
  • 网站一年费用wordpress 邮件模板
  • 网站建设乙方义务网站小图标怎么做
  • 网站程序制作月子会所 网站源码
  • 衡粘水佩网站建设展会网站建设 服务器选择很重要
  • 网站建设仟首先金手指12郑州做网站的
  • 橄榄树网站建设瑞安微网站建设
  • 网站开发公司 广告词网站架构设计师薪资水平
  • visio网站开发流程图东莞住房和建设局网站
  • 天津市住房与城乡建设部网站百度一下网页首页
  • 昆明网站建设王道下拉棒有哪些做淘宝素材的网站有哪些
  • 顶客网站和网摘网站学做网站开发
  • 永久免费手机网站建设wordpress+腾讯qq登陆
  • 昆明好的网站开发公司吴江网站设计
  • 公司核名在哪个官方网站网站建设实力宣传海报
  • 济南的企业网站建设友链大全
  • 帝国cms建站实例教程二级域名前缀大全
  • 如何来构建一个成交型网站网站注销流程
  • 中国网站建设新闻邯郸信息港手机版