`
mlzboy
  • 浏览: 726658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WebSharp Aspect改进(续2)

阅读更多
    接着上次在《朗志轻量级项目管理解决方案》中对Aspect的改进,
注意,这里我们实现了IXmlSerialization接口,以实现自定义的反序列化操作,还应注意的是在反串行的过程中,这里我们使用了一个自已实现的深拷贝DeepCopy
public class AspectCollection:CollectionBase,IXmlSerializable
    
{
        
public AspectCollection()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
public void Add(AspectItem ai)
        
{
            
this.InnerList.Add(ai);
        }

        
public new AspectItem this[int index]
        
{
            
get
            
{
                
return this.InnerList[index] as AspectItem;
            }

            
set
            
{
                
this.InnerList[index]=value;
            }


        }

        
IXmlSerializable 成员#region IXmlSerializable 成员

        
public void WriteXml(XmlWriter writer)
        
{
            
// TODO:  添加 AspectCollection.WriteXml 实现
            foreach(AspectItem ai in this.InnerList)
            
{
                writer.WriteStartElement(
"Aspect");
                writer.WriteAttributeString(
"","type","",ai.Type);
                writer.WriteAttributeString(
"","deploy-model","",ai.DeployModel);
                writer.WriteAttributeString(
"","pointcut-type","",ai.PointCutType);
                writer.WriteAttributeString(
"","action-position","",ai.ActionPosition);
                ai.Rules.WriteXml(writer);
                writer.WriteEndElement();
             }

        }


        
public System.Xml.Schema.XmlSchema GetSchema()
        
{
            
// TODO:  添加 AspectCollection.GetSchema 实现
            return null;
        }


        
public void ReadXml(XmlReader reader)
        
{
            
// TODO:  添加 AspectCollection.ReadXml 实现
            base.Clear();
            reader.MoveToContent();
            AspectCollection ac
=new AspectCollection();
            RuleCollection rc
=new RuleCollection();
            AspectItem ai
=new AspectItem();
            
while(reader.Read())
            
{
                
if (reader.IsStartElement("Aspect"))
                
{
                    ai
=new AspectItem();
                    rc.Clear();
                    reader.MoveToAttribute(
"type");
                    ai.Type
=reader.Value;
                    reader.MoveToAttribute(
"deploy-model");
                    ai.DeployModel
=reader.Value;
                    reader.MoveToAttribute(
"pointcut-type");
                    ai.PointCutType
=reader.Value;
                    reader.MoveToAttribute(
"action-position");
                    ai.ActionPosition
=reader.Value;
                    
this.Add(ai);
                    
continue;
                }


                
if (reader.IsStartElement("Rule"))
                
{
                    RuleItem ri
=new RuleItem();
                    reader.MoveToAttribute(
"type");
                    ri.type
=reader.Value;
                    reader.MoveToAttribute(
"match");
                    ri.match
=reader.Value;
                    rc.Add(ri);
                    ai.Rules
=rc.DeepCopy();
                }


            }
        
        }
这里我使用了.net内置的序列化功能
using System;
using System.Xml.Serialization;
namespace Langzhi.Aspect
{
    
/**//// <summary>
    
/// AspectItem 的摘要说明。
    
/// </summary>

    [Serializable()]
    
public class AspectItem
    
{
        
public AspectItem()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
private string m_Type;
        
private string m_DeployModel;
        
private string m_PointCutType;
        
private string m_ActionPosition;
        
private RuleCollection m_RuleCollection;
//        private string m_ID;
        private string m_AssemblyName;
        
private string m_ClassName;
        [XmlAttribute(
"type")]
        
public string Type
        
{
            
get
            
{
                
return this.m_Type;
            }

            
set
            
{
                
this.m_Type=value;
            }

        }

        [XmlAttribute(
"deploy-model")]
        
public string DeployModel
        
{
            
get
            
{
                
return this.m_DeployModel;
            }

            
set
            
{
                
this.m_DeployModel=value;
            }

        }

        [XmlAttribute(
"pointcut-type")]
        
public string PointCutType
        
{
            
get
            
{
                
return this.m_PointCutType;
            }

            
set
            
{
                
this.m_PointCutType=value;
            }

        }

        [XmlAttribute(
"action-position")]
        
public string ActionPosition
        
{
            
get
            
{
                
return this.m_ActionPosition;
            }

            
set
            
{
                
this.m_ActionPosition=value;
            }

        }

//        [XmlAttribute("id")]
//        public string ID
//        {
//            get
//            {
//                return this.m_ID;
//            }
//            set
//            {
//                this.m_ID = value;
//            }
//            
//        }
        [NonSerialized()]
        
public string ID;
        [NonSerialized()]
        
public string AssemblyName;
        [NonSerialized()]
        
public string ClassName;
        [NonSerialized()]
        
public IAspect SingletonAspect;
        
public RuleCollection Rules
        
{
            
get
            
{
                
return this.m_RuleCollection;                
            }

            
set
            
border-right: #808080 1px solid;
分享到:
评论

相关推荐

    WebSharp下载

    Websharp是众多Java Web开发技术中的一种,其核心是页面模板,它是一种通过模板引擎驱动模板来输出动态Web内容的技术。为什么要使用Websharp呢?因为它简单而高效。和Spring、Structs这些Java开发技术相比,Websharp...

    Websharp2.0(2006-2-6) ORM

    2、 O/R 映射 3、 AOP 4、 分布式访问 WebSharp主要设计思路及涉及的技术: 在数据库访问部分,使用了ADO.Net和工厂模式;在ORM部分,使用了动态代码生成和即时编译,以及对DataSet进行了扩展;在AOP部分,使用了Proxy...

    WebSharp教程

    2. 基本概念:讲解路由、控制器、模型和视图等WebSharp核心概念。 3. 请求处理:阐述如何处理HTTP请求,包括GET、POST等操作。 4. 模板引擎:解释如何使用模板来动态生成HTML响应。 5. 数据绑定和验证:介绍数据模型...

    websharp源代码

    WebSharp是一个开源框架,主要由孙亚民开发,它提供了诸如面向切面编程(AOP)等特性。本文将深入探讨WebSharp框架的核心概念、功能以及源代码学习的价值。 一、面向切面编程(AOP) 面向切面编程是软件开发中的一...

    Websharp示例工程

    Websharp是一个专为构建Web应用程序而设计的框架,它结合了C#的强大功能与JavaScript的灵活性,使得开发者能够在服务器端和客户端使用同一门语言。这个"Websharp示例工程"很可能是为了展示如何利用Websharp进行开发...

    开源的.net框架——Websharp1.0

    "Websharp.Aspect"可能是指Websharp框架中的面向切面编程(AOP)支持。AOP允许开发者将关注点分离,如日志、事务管理等,从核心业务逻辑中解耦出来,从而提高代码的可读性和可维护性。通过使用切面,开发者可以更...

    NET框架WEBSHARP相关文档

    WebSharp是一个基于.NET框架的开源项目,主要用于构建高性能的Web应用程序。它主要设计用于嵌入式设备和系统,如工业自动化、物联网(IoT)设备、数字标牌等,但同样适用于桌面和服务器环境。本篇文章将深入探讨...

    Websharp2005开源项目

    Websharp的目标,便是设计一个基于.Net的通用的应用软件系统的框架,以简化基于.Net平台的...目前,Websharp关注于企业应用软件的以下几个方面: 1、 数据库访问 2、 O/R 映射 3、 AOP 4、 分布式访问

    websharp源码

    WebSharp是一个开源项目,主要目的是将C#编程语言与JavaScript环境相结合,使开发者能够利用C#的强大功能在Web开发中创建高性能的前端和后端应用。这个源码库可能包含了WebSharper的核心库、编译器、运行时以及相关...

    WebSharp2004

    WebSharp2004是一个基于.NET Framework 1.1框架的开源项目,它展示了C#编程语言在构建Web应用程序方面的应用。这个项目可能是为了解决早期.NET开发中的特定挑战,或者是为了提供一个学习和理解Web应用程序开发基础的...

    Websharp2.0

    在数据库访问部分,使用了ADO.Net和工厂模式;在ORM部分,使用了动态...在Service Locator部分,使用的主要技术也是动态代码生成和即时编译. 注:Websharp是Open Source的,使用GNU LGPL许可证,版权属于原创者孙亚民

    AOP开发实践.docx

    以Websharp Aspect框架为例,这是一个基于.NET平台的开源AOP框架。在业务逻辑中,我们可以将权限检查等横切关注点从核心代码中移除,通过AOP框架在运行时自动插入。例如,可以创建一个`Security`类来封装权限检查,...

    Websharp-开源

    Websharp 是 Microsoft dotNet 的轻量级应用程序框架。

    通用增删查改,拿过来就可以用

    在本案例中,`Websharp.Mshop.BLL`可能包含了业务逻辑层的代码,负责处理这些添加操作,而`Websharp.Mshop.DAL`可能是数据访问层,实现与数据库的交互。例如,一个`AddProduct`方法可能用于添加新产品到数据库,这个...

    构建面向对象的应用软件系统框架

    Websharp AOP是实现AOP的一种工具,通过切面(Aspect)来实现功能的插入和组合。 **7. 设计和实现** - **封装数据库访问层**:创建一个独立的库或服务来处理所有数据库操作,使业务逻辑层与数据层解耦。 - **设计...

    一个项目的三个工程.pptx

    Websharp 是一种可能的技术框架,它关注的点可能包括数据处理、用户界面交互和应用服务层的设计。在典型的三层应用系统中,分为数据库层、用户界面层和应用服务层。数据库层负责存储数据,用户界面层用于与用户交互...

Global site tag (gtag.js) - Google Analytics