最近寫(xiě)了一個(gè)Spring.net的架構(gòu)。
一、架構(gòu)主圖
架構(gòu)圖的數(shù)據(jù)流程走向是:
UI層=》UILogic》=》Service》Business=》DataAccess
中間使用到的公共類庫(kù),如,Aop和Container
<%@ Page Language="C#" AutoEventWireup="true" Inherits="ST.Spring.UILogic.UserManage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title></title></head><body><form id="form1" runat="server"><div </div></form></body></html>
舉一個(gè)ioc配置示例:
<?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net" > <description>An example that demonstrates simple IoC features.</description> <!-- 環(huán)繞通知 --> <object id="UserAdvice" type="ST.Spring.Aop.UserAdvice,ST.Spring.Aop"></object> <!-- UserBll class --> <object id="IUserBll" type="Spring.Aop.Framework.ProxyFactoryObject"><!-- 攔截目標(biāo) --><property name="target" ref="UserBll" /><!-- 具體通知 --><property name="interceptorNames"> <list><value>UserAdvice</value> </list></property> </object> <object id="UserBll" type="ST.Spring.Business.UserBll,ST.Spring.Business"> </object> </objects>
IUserBll是接口名,繼承了是Spring.Aop.Framework.ProxyFactoryObject的ProxyFactoryObject類,被UserBll引用或者說(shuō)實(shí)現(xiàn)。UserBll繼承了ST.Spring.Business.UserBll類。
一句話,ioc就是為了在.cs業(yè)務(wù)類中,通過(guò)接口名創(chuàng)建實(shí)現(xiàn)對(duì)象。
var userBll = ObjectContainer.CreateObject<IUserBll>();
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ST.Spring.Container;using ST.Spring.DataModel;using ST.Spring.IService;namespace ST.Spring.UILogic{public class UserManage : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){var userService = ObjectContainer.CreateObject<IUserService>();User result = userService.AddUser(new User() { UserName = "xqh", Sex = "男", Password = "123" });//Response.Write(user.Singleton() + "<br/>");Response.Write("添加用戶:" + (result != null ? "成功" : "失敗") + "<br />");////Response.Write(result.UserName + result.Sex + result.Password + "<br/>");//Response.Write(user.SendMsg());Response.End();}}}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ST.Spring.DataModel;namespace ST.Spring.IService{public interface IUserService{/// <summary>/// 添加用戶/// </summary>/// <param name="u"></param>/// <returns></returns>User AddUser(User u);/// <summary>/// 發(fā)送消息/// </summary>/// <returns></returns>string SendMsg();}}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ST.Spring.Container;using ST.Spring.DataModel;using ST.Spring.IBusiness;using ST.Spring.IService;namespace ST.Spring.Service{/// <summary>/// 用戶service/// </summary>public class UserService : IUserService{private IUserBll UserBll { get; set; }private string _msg;private string _constructor;//構(gòu)造函數(shù)注入public UserService(string constructor){this._constructor = constructor;}//通過(guò)屬性注入 相當(dāng)于替代了 IUser _user = new UserDAO把這個(gè)過(guò)程交給容器來(lái)處理/// <summary>/// 消息內(nèi)容通過(guò)屬性注入/// </summary>public string MsgInfo{get { return this._msg; }set { this._msg = value; }}/// <summary>/// 添加用戶/// </summary>/// <param name="u"></param>/// <returns></returns>public User AddUser(User u){var userBll = ObjectContainer.CreateObject<IUserBll>();return userBll.AddUser(u);}/// <summary>/// 發(fā)送消息/// </summary>/// <returns></returns>public string SendMsg(){return "注入的MsgInfo值是:" + MsgInfo + "<br/>" + "_constructor通過(guò)構(gòu)造函數(shù)注入的值:" + _constructor;}}}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using AopAlliance.Intercept;namespace ST.Spring.Aop{/// <summary>/// 環(huán)繞通知/// </summary>public class UserAdvice : IMethodInterceptor{#region IMethodInterceptor 成員public object Invoke(IMethodInvocation invocation){string methodName = invocation.Method.Name;//可以攔截方法進(jìn)行日志、權(quán)限等操作if (methodName == "AddUser"){//throw new Exception(invocation.Method.Name);}object returnValue = invocation.Proceed();//return "被攔截的方法:" + methodName + "<br/>" + "返回的值:" + returnValue.ToString();return returnValue;}#endregion}}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Spring.Context;using Spring.Context.Support;namespace ST.Spring.Container{public static class ObjectContainer{//使用自定義的配置文件---獲取容器private static IApplicationContext Ctx { get; set; }public static TObject CreateObject<TObject>(){Ctx = new XmlApplicationContext(string.Format("~/SpringConfig/{0}.xml", typeof(TObject).Assembly.GetName().Name));var str = string.Empty;var t = typeof(TObject).FullName;if (t.LastIndexOf('.') > 0){str = t.Substring(t.LastIndexOf('.') + 1, t.Length - t.LastIndexOf('.') - 1);}return (TObject)Ctx.GetObject(str);}}}
創(chuàng)建方法如下:
var userService = *OBJECTCONTAINER.CREATEOBJECT<IUSERSERVICE>();*User result = userService.AddUser(new User() { UserName = "xqh", Sex = "男", Password = "123" });
下載:http://pan.baidu.com/s/1hqCGuFU
聯(lián)系客服