什么是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("我是");
}
}
}
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方法");
}
}
}
}