Spring.net是一个非常强大的框架和工具,下面是百度百科对它的介绍。
Spring.NET为建立企业级应用提供了一套轻量级的解决方案。通过Spring.NET,我们可以用统一且透明的方式来配置应用程序。
Spring.NET的重点是为中间层提供声明式事务管理,以及一个功能齐全的ASP.NET扩展框架。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖。
我只要介绍它的解耦,通过注入的方法为对象和属性赋值。
1.先创建一个控制台程序
2.引入Spring.Core组件,通过NuGet包管理器引入,依赖项会同时被引入。
3.导入命名空间
4.添加IUserInfoDal 接口
public interface IUserInfoDal
{
void Show();
}
5.添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。
public class AdoNetUserInfoDal : IUserInfoDal
{
public void Show()
{
Console.WriteLine("我是ADO.Net Dal");
}
}
public class EFUserInfoDal : IUserInfoDal
{
public void Show()
{
Console.WriteLine("我是EF Dal");
}
}
6.添加Spring.Net配置节点,配置object节点
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"></section>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core" />
</sectionGroup>
</configSections>
<!--Spring.Net节点配置-->
<spring>
<context>
<!--容器配置-->
<resource uri="config://spring/objects"></resource>
</context>
<objects xmlns="http://www.springframework.net">
<!--这里放容器里面的所有节点-->
<description>An example that demonstrates simple IoC features.</description>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="EFUserInfoDal" type="SpringNetTest.EFUserInfoDal,SpringNetTest"></object>
<object name="ADOUserInfoDal" type="SpringNetTest.AdoNetUserInfoDal,SpringNetTest"></object>
</objects>
</spring>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
sectionGroup节点的配置,必须为configuration的第一个子节点,不然会出错。
以上配置了一个section组spring,包含两个成员的section。这部分必须一致,当然,name属性是随意取的,
但是为了方便,建议和上面的配置一样。
其中context节点里配置了资源的位置,上述把资源配置在config配置文件中的objects节点中。
objects正好是对应的资源,object就是一个个的对象。
7.开始写主函数,创建spring容器上下文
namespace SpringNetTest
{
class Program
{
static void Main(string[] args)
{
//控制权没有反转
//IUserInfoDal infoDal = new EFUserInfoDal();
//Spring.Net 创建实例的方式转为容器帮我们创建
//创建spring容器上下文
IApplicationContext ct = ContextRegistry.GetContext();
//IUserInfoDal efdal = ct.GetObject("EFUserInfoDal") as IUserInfoDal;
//efdal.Show();
IUserInfoDal adodal = ct.GetObject("ADOUserInfoDal") as IUserInfoDal;
adodal.Show();
Console.ReadKey();
}
}
}