Spring.Net IOC原理与实例

什么是IOC

IOC(Inversionof Control)控制反转,也叫依赖注入(DependencyInjection)。控制反转的意思就是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变成IOC框架来管理这些对象,使得依赖脱离类本身的控制,从而实现松耦合。

控制反转和依赖注入是对同一事情的不同角度的描述。依赖注入是从应用程序的角度描述—应用程序依赖容器创建并注入它所需要的外部资源;控制反转是从容器的角度描述—容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

IOC原理

IOC是spring的核心,贯穿始终。所谓IOC,对于spring框架来说就是由spring来控制对象的生命周期和对象间的关系。

所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建,销毁都由spring来控制,也就是说控制对象生命周期的不再是引用他的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,也就是控制反转。

 

Spring.Net  IOC实例

一:引入Spring.Net相关dll

                  Spring.core.dll

                  Common.logging.dll

                  这两个是spring.net基本的dll,相关介绍见我上一篇博文--Spring.Net初识。

二:编写config配置文件,在配置文件里实现相关程序集下相对类的实例化配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--spring.net基本连接配置-->
  <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>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--这里是控制反转的关键,id对应着program里ctx.GetObject("Dog"),type中第二个为实例化对象所在的命名空间,第一个为实例化的类-->
      <object id="Dog" type="Dal.Dog,Dal" singleton="false"/>
      </objects>
   </spring> 
</configuration>


三:搭建解决方案,创建实现该IApplicationContext接口的实例

      包图:

      Dog类:
namespace Dal
{
   public class Dog:IDog
    {

        public void Save()
        {
            Console.WriteLine("我是");
        }
    }
}

      Program类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dal;
using Spring.Context;
using Spring.Context.Support;

namespace Spring
{
    class Program
    {
        static void Main(string[] args)
        {
           
            IOCMethod();
            Console.ReadLine();
        }
   
        private static void IOCMethod() {
            //创建容器
            IApplicationContext ctx = ContextRegistry.GetContext();
            IDog dog = ctx.GetObject("Dog") as IDog;

            if (dog != null) {
                dog.Save();
                Console.WriteLine("IOC方法");
            }
        }
    }
}


      运行结果:Spring.Net IOC原理与实例_第1张图片


你可能感兴趣的:(spring,IOC)