Spring.NET(一)——IoC管理对象

来源:互联网 发布:unity3d中文破解版 编辑:程序博客网 时间:2024/06/07 00:35

    IoC(Inversion of Control)翻译为控制反转,在之前我们实例化一个对象是要依赖这个对象的类的,而IoC的作用是让对象依赖类变成利用IoC容器统一管理这些对象。从而是类和对象之间耦合度降低。

    实例化一个对象,有三种方式:面向接口实例化,利用抽象工厂+反射,还有今天说的利用IoC。

    先看下面的代码:一个接口,还有它的实现

namespace Demo{    public interface IUserInfo    {        void Show();    }namespace Demo{    public class UserInfo : IUserInfo    {        public void Show()        {            Console.WriteLine("hello");        }    }}


     1.面向接口实例化,这是方式耦合度比较大。

namespace Demo{    class Program    {        private static void Main(string[] args)        {            IUserInfo userInfo=new UserInfo();            userInfo.Show();        }    }}

     2.利用抽象工厂+反射,可以不必知道具体的实现,利用工厂就可以创建出实例,这样接口和实例化对象就达到了松耦合。

namespace Demo{    /// <summary>    /// 抽象工厂+反射    /// </summary>    public static class DALFactory    {        public static IUserInfo GetusUserInfo()        {            string classFullName = "Demo.UserInfo";            var obj = Assembly.Load("Demo").CreateInstance(classFullName, true);</span>            return obj as IUserInfo;        }    }}
//控制台代码namespace Demo{    class Program    {        private static void Main(string[] args)        {            IUserInfo userInfo = DALFactory.GetusUserInfo();            userInfo.Show();        }    }}


    3.利用IoC去管理对象。

    先是写配置文件。

<?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <!--配置容器块-->    <sectionGroup name="spring">      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />    </sectionGroup>  </configSections>    <!--容器配置-->  <spring>    <!--spring容器上下文,统一入口,创建的对象在config://spring/objects这个位置-->    <context>      <resource uri="config://spring/objects"/>    </context>        <!--容器中所有的对象-->    <objects xmlns="http://www.springframework.net">     <object name="UserInfo" type="Demo.UserInfoEFDal, Demo">      </object>    </objects>  </spring></configuration>

    控制台代码

namespace Demo{    class Program    {        static void Main(string[] args)        {            //创建spring.net统一入口            IApplicationContext ctx = ContextRegistry.GetContext();            //控制反转,实例创建由容器创建            IUserInfo dal = ctx.GetObject("UserInfo") as IUserInfo;            dal.Show();            Console.ReadLine();        }    }}

总结

    从三种方式来对比了实例化一个对象的三种方式,第一种是利用面向接口编程的思想,让实现依赖接口,这样的耦合度还是很大。第二种方式利用抽象工厂加反射,这种方式可以完全不用考虑实现接口的类,直接利用工厂获取一个实例,这种方式达到了松耦合的效果;第三种方式应该也是利用了工厂模式的方式,而整个IoC更像一个封装好的工厂,只要我们写配置文件就可以实例对象,更加简单,也更灵活。


1 0
原创粉丝点击