Spring.Net依賴注入(屬性注入)學習筆記


 

一、前言:

Spring.Net是Java開源框架遷移過來的,主要分為

1)依賴注入 

2)面向方面編程

3)數據訪問抽象

4)Asp.Net擴展

四個模塊功能,這里只是簡單介紹依賴注入模塊功能。

對於Mybatis,在這里也是簡單介紹相關配置和實現插入和查找功能。

二、項目結構:

 

DAL\BLL\Web項目在這里不作介紹,因為本文章重點不在這里。

這里着重介紹下Spring.Net和MyBatis的東西。開始開發前,請先下載先關要引用的組件,具體下載和要引用什么組件推薦上官網了解和下載,這里不再詳細贅述。

其他文件說明:

1、Res文件夾下BLLObjects.xml等文件:Spring.net框架定義依賴注入的類定義和屬性。

2、Web根目錄下的Webconfig定義一些Spring.net的基礎配置和資源文件存放位置。

三、具體開發

1、Spring.Net模塊介紹

這里以BLL層的Web層為例作介紹,其他層也是類似,讀者可以舉一反三。

關於Spring.Net框架的WebConfig配置如下:

1)注冊Spring.Net庫的dll:

1 <!--Spring.Net配置 引用Spring需要使用的類型-->
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>

2)添加對aspx頁面注入支持:

在webconfig根節點的config節點下面的configuration的System.Web(如果沒有此節點請自行添加)節點下配置如下。這個配置也是必要的,作用是添加對aspx頁面注入的支持。

 1     <httpHandlers>
 2       <remove verb="*" path="*.asmx" />
 3       <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
 4     </httpHandlers>
 5     <httpModules>
 6       <!--這里不能漏,不然頁面注入的時候會出錯-->
 7       <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
 8 
 9     </httpModules>
10 
11  

3)引入類型定義文件:

Webconfig xml根節點下配置引入定義對象的資源文件。引入資源文件分為兩種方式,一種是作為資源嵌入到程序集中,如下面注釋代碼所示,uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>。用這種方式要在Visual Studio資源管理器中將Objects.xml文件的生成操作屬性改成嵌入的資源,不然是沒把文件帶進去的。這里推薦第二中方式,即本項目使用的方式,

直接使用相對路徑描述資源。如:<resource uri="~/Res/Objects/BLLObjects.xml"/>。符號"~"代表根目錄。

 1   <spring>
 2     <context>
 3       <!--assembly://程序集名/命名空名/文件名(程序集內嵌資源)-->
 4       <!--<resource uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>-->
 5       <resource uri="config://spring/objects" />
 6       <resource uri="~/Res/Objects/TestObjects.xml"/>
 7        <!--數據庫連接對象-->
 8       <resource uri="~/Res/Objects/DBConfig.xml"/>
 9       <resource uri="~/Res/Objects/BLLObjects.xml"/>
10       <resource uri="~/Res/Objects/DALObjects.xml"/>
11     </context>
12     <!--必要-->
13     <objects xmlns="http://www.springframework.net">
14     </objects>
15   </spring>

 4)類型定義配置:

BLLObjects.xml文件里面的內容如下所示。諸如此類的文件作用是定義類型,這個是Spring.Net注入的關鍵。這里解釋一下下面配置文件的意思。

每一個object節點,描述了C#代碼中的一個類,object節點的id是個身份標記,這個必須是唯一的;type屬性描述了具體的類,這個屬性由類的全名+逗號+類的命名空間構成。

例如type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL"。這里描述的是BLL層中的ArtiCaManager類。而object節點下面的property 屬性則是描述了這個類下面的屬性,這是本項目依賴注入的關鍵(本項目采用的注入方式只要是屬性注入和構造注入)。例如節點 :

<property name="ArtiCaDao" ref="ArtiCaDao"></property> 。

這個是ArtiCaManager類下面的屬性:

 public IArtiCaDao ArtiCaDao { get; set; } //文章類別數據操作類。

這個屬性節點的作用是描述了IArtiCaDao接口實例化的類型是ArtiCaDao(ref="ArtiCaDao">)。而ref屬性里面寫的是object節點的ID,作用也是描述了一個類型。

 

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 
 3 <objects xmlns="http://www.springframework.net"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://www.springframework.net 
 6   http://www.springframework.net/xsd/spring-objects.xsd">
 7   <!--類型的全名,然后是一個逗號,最后是類型所在的程序集名稱-->
 8   <!--<object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager, MyBlog.BLL" />-->
 9   
10   <object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL">
11     <property name="ArtiCaDao" ref="ArtiCaDao"></property>
12   </object>
13   
14   <object id="LogMana" type="MyBlog.BLL.LogManager,MyBlog.BLL">
15     <property name="iLogDao" ref="LogDao"></property>
16   </object>
17 
18   <object id="DeptMana" type="MyBlog.BLL.DepartmentManager,MyBlog.BLL">
19     <property name="iDepartmentDao" ref="DepartmentDao"></property>
20   </object>
21     
22 </objects>

5)代碼實現: 

BLL層ArtiCaManager類代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyBlog.Model;
using MyBlog.IDAL;
using Spring.Context;
using Spring.Context.Support;
using MyBlog.IBLL;

namespace MyBlog.BLL
{
    /// <summary>
    /// 文章類別管理業務邏輯類
    /// </summary>
    public class ArtiCaManager : IArtiCaManager
    {

        public IArtiCaDao ArtiCaDao { get; set; } //文章類別數據操作類

        /// <summary>
        /// 插入文章類別
        /// </summary>
        /// <param name="arCa">文章類別實體類</param>
        /// <returns>是否插入成功</returns>
        public bool InsertCa(ArticleCategory arCa)
        {
            arCa.CategoryName =  arCa.CategoryName+ "[這里是調用了文章類別管理類BLL接口插入的]";   //僅供測試留個記號
            return ArtiCaDao.InsertCa(arCa);
        }

        /// <summary>
        /// 取出所有文章類別
        /// </summary>
        /// <returns>文章類別列表</returns>
        public IList<ArticleCategory> SelectAllCa()
        {
            return ArtiCaDao.SelectAllCa();
        }
    }
}

 四、結論

Spiring.Net的依賴注入,主要是利用了.Net反射的特性,在xml中定義了.Net中某個對象的類型,然后框架自動實例化,好處在於提高軟件的靈活性,特別是對於一個接口有多個實現的場景。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM