我在上一篇關於Spring.net的文章“Spring.NET框架簡介及模塊說明 ”中很詳細的介紹了,本文就不舊話從提。我門就直奔主題吧。
1.首先了解兩個接口.
IObjectFactory接口和IApplicationContext接口:他兩個稱為“容器”或“IOC容器”。
Spring.net框架的核心原則是非侵入性。
IObjectFactory接口是初始化、配置及管理對象的實際容器。
IObjectFactory全限定名為Spring.Objects.Factory.IObjectFactory,IObjectFactory接口有多個實現,其中最
常用的是Spring.Objects.Factory.XML.XmlObjectFactory。
2.對象定義的XML文件
在app.config或是web.config中加入
<spring>
<context type="Spring.Context.Support.XmlAppliationContext",Spring.Core"/>
<resource uri=file://objects.xml//>
</spring>
注意:context的type屬性是可以省略的。
3.spring和context的順序是有限制的,在Spring.net框架裡已經將“spring/context”作為字符串常量定義在了AbstractApplicationContext類中以來表示上下文的接點名稱。可通過:
IApplicationContext context=ContextRegistry.GetContext();來獲取接點值,這裡要注意一點。在使用他的時候必須要使配置文件中的<spring>接點起作用,這樣就得必須在.NET的配置文件<configSections>節點下注冊類Spring.Context.Support.ContextHandler,它讓ContextRegistry類可用來初始化應用程序上下文,它實現在FCL的IConfigurationSectionHandler接口
3.XML對象定義可在<objects>節點注冊
<section name="objects" type="Spring.Context.Support.DefultSectionHandler,Spring.Core">
4.Spring.net的IOC容器的簡單實例----用簡單三層來實現
光說這麼多沒用,我門還是來點實際的,看看下面的這個簡單實例:
一.先建立項目隨後添加引用Spring.Core程序集。
二.引用System.Configuration----需要用到ConfigurationManager類的方法。
三.配置.NET配置文件----具體配置如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<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"/>
</context>
<objects>
<!--這的配置根據實際的程序來的,UsersCompontents是程序集Spring.Demo.Compontext下的一個類-->
<object name="Users"
type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
</object>
</objects>
</spring>
</configuration>
四.建立好項目的實體類和接口以及實現借口。
下面是實例程序的結構圖:Model(實體層),Service(接口),Compontent(實現接口的業務邏輯),SimpleTest(測試)
五.首先看看實體層的定義,我相信代碼大家都看得懂就不多說了,直接貼上來。
using System;
using System.Collections.Generic;
using System.Text;
namespace Spring.Demo.Model
{
/// <summary>
/// 用戶類
/// </summary>
public class Users
{
/// <summary>
/// 編號
/// </summary>
private int _oid;
public int Oid
{
get { return _oid; }
set { _oid = value; }
}
/// <summary>
/// 姓名
/// </summary>
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 性別
/// </summary>
private string _sex;
public string Sex
{
get { return _sex; }
set { _sex = value; }
}
/// <summary>
/// 年齡
/// </summary>
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
}
}
六.在看接口的定義
using System;
七.實現接口方法的邏輯
using System.Collections.Generic;
using System.Text;
namespace Spring.Demo.Service
{
public interface IUsers
{
/// <summary>
/// 返回用戶的詳細信息的方法
/// </summary>
/// <returns></returns>
string GetUserInfo();
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Spring.Demo.Service;
using Spring.Demo.Model;
namespace Spring.Demo.Compontext
{
public class UsersCompontents:IUsers
{
public UsersCompontents()
{ }
#region 獲取用戶信息
public string GetUserInfo()
{
Users user = new Users();
user.Oid = 1;
user.Name = "Beniao";
user.Sex = "Boy";
user.Age = 25;
return string.Format("編號:{0}--->姓名:{1}--->性別:{2}--->年齡:{3}",
user.Oid,
user.Name,
user.Sex,
user.Age);
}
#endregion
}
}
八.通過Spring.net的IOC容器IApplicationContext從config文件中取得程序集信息和調用方法實現控制反轉
//從config文件中取得程序集信息
IApplicationContext context = ConfigurationManager.GetSection("spring/context")
as IApplicationContext;
//調用方法
//Users為config文件裡的配置節
//<object name="Users"
// type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
//</object>
IUsers user = context.GetObject("Users") as IUsers;
Console.WriteLine(user.GetUserInfo());
Console.Read();
運行結果如下:
關於Spring.net的IOC容器就簡單介紹在這裡了,我也是剛學Spring.net,文章裡難免會出現錯誤,目前
Spring.net的人氣太低了,希望對這有興趣的朋友多多探討,更希望這方面的高手能多指教。如文章中發現
錯誤希望大家留言提出,我門大家一起學習,改進。
本文配套源碼