一、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
第二步: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 "1.0" encoding="utf-8" ?> 23 4 9"spring"> 5 8"context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> 6 "objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> 7 10 2111 12 14 15"config://spring/objects"/> 13 "http://www.springframework.net"> 16 20An example that demonstrates simple IoC features. 17 18 <object name="IUserInfo" type="SpringDemo.UserInfo, SpringDemo"> object> 19
第五步:创建类与接口
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 "1.0" encoding="utf-8" ?> 23 4 9"spring"> 5 8"context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> 6 "objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> 7 10 2511 12 15 16"config://spring/objects"/> 13 "file://Dals.xml"/> 14 "http://www.springframework.net"> 17 24An example that demonstrates simple IoC features. 18 19 <object name="IUserInfo" type="Demo.UserInfoDal, Demo"> 20 21"Name" value="alex"/> 22 object> 23 26 28"v4.0" sku=".NETFramework,Version=v4.5.2" /> 27