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

对websharp中aspect的改进(待续)

阅读更多

缘起
    为了在我的《朗志轻量级项目管理解决方案》项目中应用AOP,考虑了多种实现方式,首先想到的是postsharp,无奈它是基于2.0的,要不然它是首选了,可惜我的项目是基于1.1,只好舍弃了。接下来就是Castle DynamicProxy,可是它需要虚的非密封方法,这个要求让我很为难,也只好放弃了。最后选择了Remoting的实现方式,虽然它有百般的不是,但是对于我的这个项目而言,最重要的是可以解决我的问题,而且项目对性能效率几乎可以说是没有要求,查看了一下园子里关于使用Remoting实现aop的文章,那可不是一般的多哈,而且都贴出了相应的实现代码(注意是个“贴”字)可对于我这样的懒人,连粘代码调试的心情都没有。几经波折,发现了孙亚民先生的WebSharp这个东东,里面包含了一个基于Remoting的Aspect模块,对其做了良好的包装,而且说明的文档详尽,还是中文的,于是就在项目中使用它了。

问题
在WebSharp中提供了拦截类方式,如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
<configSections>
<section name="Websharp.Aspects" type="Websharp.Aspect.AspectConfigHandler,Websharp.Aspect" />
    
</configSections>
    
    
<Websharp.Aspects>
        
<Aspect type="WeaveTest.FirstAspect,WeaveTest" deploy-model="None" 
 pointcut-type
="Method|Construction|Property" action-position="Both" match="*,Get*" />
    
</Websharp.Aspects>
</configuration>


注意黄色的部分,就是原先的匹配方式,我想对项目中的一类方法进行横切,但是其中有几个是特例,再是我的方法的命名又没有什么规则,万般无奈之下动了改造的念头,我设想的是能够达到如下的效果

    <Langzhi.Aspects>
        
<Aspect type="Langzhi.Security.Aspect.PermissionAspect,Langzhi.Security" deploy-model="Singleton" pointcut-type="Method" action-position="Before">
            
<Rule type="include" match="Langzhi\.PM\.BLL\.Facade\..*,.*" />
            
<Rule type="exclude" match="Langzhi\.PM\.BLL\.Facade\.UserManager,ValidLogin" />
        
</Aspect>
        
<Aspect type="Langzhi.Security.Aspect.AuditLogAspect,Langzhi.Security" deploy-model="Singleton"    pointcut-type="Method" action-position="After">
            
<Rule type="include" match="Langzhi\.PM\.BLL\.Facade\..*,.*" />
            
<Rule type="exclude" match="Langzhi\.PM\.BLL\.Facade\.UserManager,ValidLogin" />
        
</Aspect>
        
<Aspect type="Langzhi.Security.Aspect.LoginAuditLogAspect,Langzhi.Security" deploy-model="Singleton" pointcut-type="Method" action-position="Both">
            
<Rule type="include" match="Langzhi\.PM\.BLL\.Facade\.UserManager,ValidLogin" />
        
</Aspect>
        
<Aspect type="Langzhi.Security.Aspect.LogoutAuditLogAspect,Langzhi.Security" deploy-model="Singleton" pointcut-type="Method" action-position="Both">
            
<Rule type="include" match="Langzhi\.PM\.BLL\.Facade\.UserManager,Logout" />
        
</Aspect>
    
</Langzhi.Aspects>

改造
    /**//// <summary>
    
/// 读取Aspect配置文件的类
    
///
 Class to get the configuration of Aspects. 
    
/// </summary>

    public class AspectConfigHandler : IConfigurationSectionHandler
    
{
        
/**/
/// <summary>
        
/// 由所有配置节处理程序实现,以分析配置节的 XML
        
/// </summary>

        
/// <param name="parent">对应父配置节中的配置设置</param>
        
/// <param name="context">在从 ASP.NET 配置系统中调用 Create 时为 HttpConfigurationContext。否则,该参数是保留参数,并且为空引用。</param>
        
/// <param name="section">一个 XmlNode,它包含配置文件中的配置信息。提供对配置节 XML 内容的直接访问。</param>
        
/// <returns>配置对象</returns>

        object IConfigurationSectionHandler.Create ( object parent, object context,    XmlNode section )        
        
{
            
if (object.Equals(section,null
))
            
{
                
throw(new
 ArgumentNullException());
            }

            XmlReader reader
=new XmlNodeReader(section);
            XmlRootAttribute xra
=new
 XmlRootAttribute();
            xra.ElementName
="Langzhi.Aspects"
;
            xra.IsNullable
=false
;
            xra.DataType
="string"
;
            xra.Namespace
=""
;
            XmlSerializer xs
=new XmlSerializer(typeof
(AspectCollection),xra);
            
return
    xs.Deserialize(reader);
        }
}

配置文件变了,当然,读取的方式也得变了,原先WebSharp Aspect中采用的是操作xml的方式来读取节点,这里我们使用了反串行化的方式,还原对象的状态。这或许是一点小小的进步吧,但不知道效率怎么样了,不故用起来倒是挺爽的。

__________________________________________
朗志工作室:承接北京地区网站类项目

分享到:
评论

相关推荐

    WebSharp下载

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

    WebSharp教程

    WebSharp教程:深入理解C#源码在Web开发中的应用 WebSharp是一个强大的开发框架,它结合了C#编程语言的高效性和Web开发的灵活性。本教程将带你深入探索WebSharp的世界,理解其核心概念、功能以及如何利用C#源码进行...

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

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

    websharp源代码

    通过深入研究"Websharp1.0Source"中的每一个文件和目录,开发者不仅可以学习到WebSharp框架的内部机制,还能进一步提升自己的编程技能,更好地理解和运用面向切面编程以及其他相关的软件开发技术。

    Websharp2.0(2006-2-6) ORM

    在ORM部分,使用了动态代码生成和即时编译,以及对DataSet进行了扩展;在AOP部分,使用了Proxy机制;在Service Locator部分,使用的主要技术也是动态代码生成和即时编译。 针对Websharp,UML软件工程组织提供一系列的...

    Websharp示例工程

    通过研究这个"Websharp示例工程",开发者不仅可以学习到Websharp框架的使用,还能进一步提升C#编程技能,了解Web开发的整体流程,对全栈开发有更深入的理解。这将有助于你构建高效、可维护的Web应用程序。

    NET框架WEBSHARP相关文档

    本篇文章将深入探讨WebSharp框架及其在.NET开发中的应用。 一、WebSharp框架基础 WebSharp是.NET框架的一个扩展,它提供了C#语言来编写前端代码,使得开发者可以使用熟悉的.NET工具和库来构建全栈Web应用。这一特性...

    websharp源码

    总的来说,WebSharp源码提供了一个独特的视角来理解如何在Web开发中结合C#和JavaScript,对于想深入了解跨语言开发或者对WebSharper感兴趣的开发者来说,这是一个宝贵的资源。通过系统地学习和研究,你可以提升自己...

    Websharp2005开源项目

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

    WebSharp2004

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

    Websharp2.0

    在ORM部分,使用了动态代码生成和即时编译,以及对DataSet进行了扩展;在AOP部分,使用了Proxy机制;在Service Locator部分,使用的主要技术也是动态代码生成和即时编译. 注:Websharp是Open Source的,使用GNU LGPL...

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

    在`Websharp.Mshop.BLL`中,可能会有如`DeleteProduct`这样的方法,接收一个产品ID作为参数,然后在`Websharp.Mshop.DAL`中执行相应的删除SQL命令。安全性和事务管理在此处显得尤为重要,确保单个操作失败时,整个...

    Websharp-开源

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

    AOP开发实践.docx

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

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

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

Global site tag (gtag.js) - Google Analytics