电竞比分网-中国电竞赛事及体育赛事平台

分享

Spring.net架構(gòu)示例(含Aop和Ioc)源碼

 黃金屋1 2019-05-26

最近寫(xiě)了一個(gè)Spring.net的架構(gòu)。
一、架構(gòu)主圖

架構(gòu)圖的數(shù)據(jù)流程走向是:
UI層=》UILogic》=》Service》Business=》DataAccess
中間使用到的公共類(lèi)庫(kù),如,Aop和Container

二、Default.aspx頁(yè)面代碼

<%@ Page Language="C#" AutoEventWireup="true"  Inherits="ST.Spring.UILogic.UserManage" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www./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." >

  <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類(lèi),被UserBll引用或者說(shuō)實(shí)現(xiàn)。UserBll繼承了ST.Spring.Business.UserBll類(lèi)。

一句話,ioc就是為了在.cs業(yè)務(wù)類(lèi)中,通過(guò)接口名創(chuàng)建實(shí)現(xiàn)對(duì)象。

var userBll = ObjectContainer.CreateObject<IUserBll>();

三、UILogic頁(yè)面的

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();
}
}
}

四、IService.cs和Service.cs

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;
}
}
}

五、Aop類(lèi)UserAdvice.cs

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
}
}

六、IOC容器創(chuàng)建類(lèi)ObjectContainer.cs

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多