天天看點

開源架構 - SpringNet

簡介

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到項目中)

     

開源架構 - SpringNet

            NuGet方式擷取

  • 建立一個空白解決方案,并命名為SpringNetDemo
  • 添加一個桌面應用程式,并命名為SpringNetApp
  • 添加一個接口,并命名為IUserInfoService.cs
  • 添加一個類,并命名為Person.cs
  • 添加一個類,并命名為UserInfoService.cs
  • 添加一個應用程式配置檔案,并命名為App.Config
  • 添加一個xml檔案,并命名為Services.xml      

我們做如下修改:

  1. 在IUserInfoService接口中定義一個方法;
  2. 在Person類中聲明一個UserName屬性;
  3. 在UserInfoService類中定義一個屬性Age,并讓UserInfoService繼承IUserInfoService并去實作showMsg這個方法;
  4. 接下來我們分别為App.Config和Services.xml進行配置,實作通過SpringNet進行相關接口的建立;
  5. 通過IApplicationContext接口下的GetObject方法即可實作在不建立類的情況下,完成類的相關屬性、方法等的調用。

核心代碼:

開源架構 - SpringNet
開源架構 - SpringNet
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

開源架構 - SpringNet
開源架構 - SpringNet
using System;     using System.Collections.Generic;     using System.Linq;     using System.Text;     namespace SpringNetApp     {         public class Person         {             public string UserName { get; set; }         }     }      

Person

開源架構 - SpringNet
開源架構 - SpringNet
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

開源架構 - SpringNet
開源架構 - SpringNet
<?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

開源架構 - SpringNet
開源架構 - SpringNet
<?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

開源架構 - SpringNet
開源架構 - SpringNet
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

運作效果:

開源架構 - SpringNet

  作者:Jeremy.Wu

  出處:https://www.cnblogs.com/jeremywucnblog/

  本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀