一、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 <?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例項物件,但是已經通過配置檔案,正確的例項化了,依賴注入成功。