首页 > 编程语言 > 详细

Spring.NET——IoC管理对象

时间:2015-03-23 01:59:00      阅读:251      评论:0      收藏:0      [点我收藏+]

    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更像一个封装好的工厂,只要我们写配置文件就可以实例对象,更加简单,也更灵活。


Spring.NET——IoC管理对象

原文:http://blog.csdn.net/suneqing/article/details/44546781

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!