码迷,mamicode.com
首页 > 编程语言 > 详细

Spring.NET 控制反转(IoC)和环境配置

时间:2015-10-12 12:23:23      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;
using Common.Logging;

namespace Test2
{
    /// <summary>
    /// 在学习Spring.NET这个控制反转(IoC)和面向切面(AOP)的容器框架之前,我们先来看一下什么是控制反转(IoC)。
  /// 控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(Dependency Injection)。
    /// 我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理这些对象,
    /// 使得依赖脱离类本身的控制,从而实现松耦合。
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //普通实现
            IPersonDao dao = new PersonDao();
            dao.Save();
            Console.WriteLine("我是一般方法");
            //Program必然需要知道IPersonDao接口和PersonDao类。为了不暴露具体实现,
            //我可以运用设计模式中的抽象工厂模式(Abstract Factory)来解决。
            IPersonDao daoFactory = DataAccess.CreatePersonDao();
            daoFactory.Save();
            Console.WriteLine("我是工厂方法");
            IoCMethod();  // IoC方法"
            Console.ReadLine();
        }

        /// <summary>
        /// 这样从一定程度上解决了Program与PersonDao耦合的问题,但是实际上并没有完全解决耦合,
        /// 只是把耦合放到了XML 文件中,通过一个容器在需要的时候把这个依赖关系形成,
        /// 即把需要的接口实现注入到需要它的类中。我个人认为可以把IoC模式看做是工厂模式的升华,
        /// 可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的。
        /// </summary>
        private static void IoCMethod()
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            IPersonDao dao = ctx.GetObject("PersonDao") as IPersonDao;
            if (dao != null)
            {
                dao.Save();
                Console.WriteLine("我是IoC方法");
            }
        }


    }

    public interface IPersonDao
    {
        void Save();
    }

    public class PersonDao : IPersonDao
    {
        public void Save()
        {
            Console.WriteLine("保存 Person");
        }
    }

    public static class DataAccess
    {
        public static IPersonDao CreatePersonDao()
        {
            return new PersonDao();
        }
    }


}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!--跟下面Spring.Net节点配置是一一对应关系-->
    <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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <spring>

    <context>
      <resource uri="config://spring/objects"/>
    </context>

    <objects xmlns="http://www.springframework.net">
      <!--这里放容器里面的所有节点-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
      <object name="PersonDao" type="Test2.PersonDao, Test2">
      </object>
    </objects>
  </spring>
</configuration>

 

Spring.NET 控制反转(IoC)和环境配置

标签:

原文地址:http://www.cnblogs.com/lgxlsm/p/4871059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!