簡介
Spring.Net的線上手冊簡介如下:
即使有先進的工具和技術,軟體開發也是一件相當令人頭疼的工作。Spring.NET為建立企業級應用提供了一套輕量級的解決方案。通過Spring.NET,我們可以用統一且透明的方式來配置應用程式,并在應用中內建AOP的功能。Spring.NET的重點是為中間層提供聲明式事務管理,以及一個功能齊全的ASP.NET擴充架構。
Spring.NET可以為很多領域的企業級應用開發提供“一站式服務”。雖然功能強大,Spring.NET仍然是子產品化的,允許單獨使用其中的任一部分。在使用IoC容器來配置應用程式時,我們既可以用傳統的ADO.NET來通路資料庫,也可以使用Spring.NET的Hibernate內建代碼或ADO.NET抽象層來通路資料庫。Spring.NET是非侵入式的,代碼對架構本身不會産生任何依賴(或者隻需要極少的依賴,取決于應用的範疇)。
通過上面的說明我們可以知道,在軟體開發中可以借助其進行關鍵類的建立,降低資料層與業務邏輯層的耦合,在一定程度上減少二次開發的難度。
執行個體說明
下面我們通過一個簡單的Demo進行說明一下SpringNet的使用。
- 擷取SpringNet動态連結庫。
- NuGet方式擷取(搜尋Spring.Core)
- 手工下載下傳後,添加到項目的引用中(添加Bin\Release目錄下Common.Logging.dll和Spring.Core.dll到項目中)
NuGet方式擷取
- 建立一個空白解決方案,并命名為SpringNetDemo
- 添加一個桌面應用程式,并命名為SpringNetApp
- 添加一個接口,并命名為IUserInfoService.cs
- 添加一個類,并命名為Person.cs
- 添加一個類,并命名為UserInfoService.cs
- 添加一個應用程式配置檔案,并命名為App.Config
- 添加一個xml檔案,并命名為Services.xml
我們做如下修改:
- 在IUserInfoService接口中定義一個方法;
- 在Person類中聲明一個UserName屬性;
- 在UserInfoService類中定義一個屬性Age,并讓UserInfoService繼承IUserInfoService并去實作showMsg這個方法;
- 接下來我們分别為App.Config和Services.xml進行配置,實作通過SpringNet進行相關接口的建立;
- 通過IApplicationContext接口下的GetObject方法即可實作在不建立類的情況下,完成類的相關屬性、方法等的調用。
核心代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SpringNetApp 7 { 8 public interface IUserInfoService 9 { 10 /// <summary> 11 /// 展示相關資訊 12 /// </summary> 13 string showMsg(); 14 } 15 }
IUserInfoService.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SpringNetApp { public class Person { public string UserName { get; set; } } }
Person
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace SpringNetApp { public class UserInfoService : IUserInfoService { /// <summary> /// 使用者年齡資訊 /// </summary> public int Age { get; set; } /// <summary> /// 人類 /// </summary> public Person person { get; set; } /// <summary> /// 展示一段資訊,并根據使用者名和年齡動态加載 /// </summary> public string showMsg() { return "Hi this is my first SpringNet Test Demo and I am " + person.UserName + " " + Age + " years old !"; } } }
UserInfoService.cs
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--- 配置SpringNet 開始 --> <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"/> <resource uri="file://Services.xml"/> </context> <objects xmlns="http://www.springframework.net" > </objects> </spring> <!--- 配置SpringNet 結束 --> </configuration>
App.Config
<?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <description>An example that demonstrates simple IoC features.</description> <!-- 單獨寫在此處主要為了和後續維護的友善 --> <object name="UserInfoService" type="SpringNetApp.UserInfoService, SpringNetApp"> <property name="Age" value="29" /> <property name="Person" ref="Person" /> </object> <object name="Person" type="SpringNetApp.Person, SpringNetApp"> <property name="UserName" value="Jeremy.Wu" /> </object> </objects>
Services.xml
using Spring.Context; using Spring.Context.Support; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SpringNetApp { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } /// <summary> /// 測試一下 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { // 傳回的就是一個已經根據<objects/>節點的内容配置好的容器對象 IApplicationContext ctx = ContextRegistry.GetContext(); IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService"); MessageBox.Show(lister.showMsg(), "Infomation", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
FrmMain.cs
運作效果:
作者:Jeremy.Wu
出處:https://www.cnblogs.com/jeremywucnblog/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。