一、Spring.Net概念
编程模型(Ioc,DI方式)
IoC:控制反转 原来创建对象的权利由程序来控制就是new实例,IoC就是改由容器来创建,相当于一个工厂, DI:依赖注入 没有IoC就没有DI,DI:容器在创建对象时,通过读取配置文件(一般是xml)设置的默认值,使其在创建时就拥有了某些注入的值。
什么是Spring.net?
spring是一个依赖注入的设计框架,使项目层与层之间解耦达到更灵活的使用。Spring.net是Spring中支持.net开发的框架。 Spring.net是一个企业级的重型依赖注入框架应用框架。Spring.Net会让应用性能下降,不过它的灵活的优点远大于缺点。适合用来做企业的oa系统之类的。 Spring.net能够干什么? 在core(核心)和AOP(模型支持,属性反转,接受注入)之上支持: 1, MSQ(消息队列) 2, MVC 3, WEB 4, Quartz.net Spring.net能做到的不止如此。
二、DEMO示例
新建一个控制台程序,程序比较简单,直接上代码
老方法
Program.cs
1 using System;
2
3 namespace Spring.Net.DEMO
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 IUserInfoDal UserInfo = new UserInfoDal();
10 UserInfo.Show();
11 Console.ReadKey();
12 }
13 }
14 }
IUserInfoDal.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Spring.Net.DEMO
6 {
7 public interface IUserInfoDal
8 {
9 void Show();
10 }
11 }
UserInfoDal.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Spring.Net.DEMO
6 {
7 public class UserInfoDal : IUserInfoDal
8 {
9 public void Show()
10 {
11 Console.WriteLine("越来越帅");
12 }
13 }
14 }
效果


Spring.Net注入方式
** 第一步去官网下载Spring.Net程序集**
地址:http://www.springframework.net/download.html

1 链接:https://pan.baidu.com/s/1cLjAi0lS_iy1tKRMJIBw0w
2 提取码:tn3s
也可以到我百度云盘上下载,包含中文API
第二步:XXX\XXX\Spring.NET-1.3.1\Spring.NET\bin\net\4.0\release下找到 Common.Logging.dll和Spring.Core.dll这两个dll复制到项目中添加引用

第三步:引入命名空间
1 using Spring.Context;
2 using Spring.Context.Support;
第四步(app.config文件):
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <configSections>
4 <sectionGroup name="spring">
5 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
6 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
7 </sectionGroup>
8 </configSections>
9 <spring>
10 <context>
11 <!--Spring.Net对象容器的配置(下面这句话表示:容器里的对象,在当前配置文件(Web.config)的spring节点下的objects节点中配置对象)-->
12 <resource uri="config://spring/objects"/>
13 </context>
14 <!--objects:配置的容器里面的对象-->
15 <objects xmlns="http://www.springframework.net">
16 <description>An example that demonstrates simple IoC features.</description>
17 <!--name起个名字,一般为类的名称;type:左边:命名空间+类名,右边:命名空间-->
18 <object name="IUserInfo" type="SpringDemo.UserInfo, SpringDemo"> </object>
19 </objects>
20 </spring>
21 </configuration>
第五步:创建类与接口
IUserInfoDal.cs(接口)
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace DEMO
6 {
7 public interface IUserInfoDal
8 {
9 string Show();
10 }
11 }
UserInfoDal.cs(类)
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace DEMO
6 {
7 public class UserInfoDal : IUserInfoDal
8 {
9 public string Show()
10 {
11 return "越来越帅!~";
12 }
13 }
14 }
第六步:实现
1 using Spring.Context;
2 using Spring.Context.Support;
3 using System;
4 using System.Windows.Forms;
5
6 namespace DEMO
7 {
8 public partial class Form1 : Form
9 {
10 public Form1()
11 {
12 InitializeComponent();
13 }
14
15 private void Button1_Click(object sender, EventArgs e)
16 {
17 //这句代码让spring.net读取配置文件,自动完成注入和反转操作,创建实例UserInfoDalInstance
18 IApplicationContext ctx = ContextRegistry.GetContext();
19 //我们到所创建的上下文里面拿到我们刚才创建的实例IUserInfo
20 IUserInfoDal dll = ctx.GetObject("IUserInfo") as UserInfoDal;
21 string res = dll.Show();
22 }
23 }
24 }
第七步:搞定!!!

程序中并没有new实例对象,但是已经通过配置文件,正确的实例化了,依赖注入成功。
补充:
属性注入(UserInfoDal.cs):
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace Demo
8 {
9 public class UserInfoDal : IUserInfoDal
10 {
11 public string Name
12 {
13 get;set;
14 }
15
16 public string Show()
17 {
18 return Name+"越来越帅!~";
19 }
20 }
21 }
配置文件(app.config):
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <configSections>
4 <sectionGroup name="spring">
5 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
6 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
7 </sectionGroup>
8 </configSections>
9 <spring>
10 <context>
11 <!--Spring.Net对象容器的配置(下面这句话表示:容器里的对象,在当前配置文件(Web.config)的spring节点下的objects节点中配置对象)-->
12 <resource uri="config://spring/objects"/>
13 <resource uri="file://Dals.xml"/>
14 </context>
15 <!--objects:配置的容器里面的对象-->
16 <objects xmlns="http://www.springframework.net">
17 <description>An example that demonstrates simple IoC features.</description>
18 <!--name起个名字,一般为类的名称;type:左边:命名空间+类名,右边:命名空间-->
19 <object name="IUserInfo" type="Demo.UserInfoDal, Demo">
20 <!--属性注入,name:属性名称;value:属性的值-->
21 <property name="Name" value="alex"/>
22 </object>
23 </objects>
24 </spring>
25 <startup>
26 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
27 </startup>
28 </configuration>
