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

1、前言:html

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

1)依賴注入 spring

2)面向方面編程數據庫

3)數據訪問抽象編程

4)Asp.Net擴展windows

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

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

2、項目結構:spa

 

DAL\BLL\Web項目在這裏不做介紹,由於本文章重點不在這裏。.net

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

其餘文件說明:

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

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

3、具體開發

一、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();
        }
    }
}
複製代碼

 4、結論

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

 

一個小問題整了兩天,哎,仍是太嫩了,還要繼續努力呀

 

原文連接:https://www.cnblogs.com/still-windows7/archive/2013/04/09/2826743.html

相關文章
相關標籤/搜索