IBatis.Net学习笔记十一:Castle.DynamicProxy的使用

简介:
Castle是另外一个框架,包含了AOP、IOC、ORM等多个方面,其中的Castle.DynamicProxy可以实现动态代理的功能,这个也是很多框架的基础。在IBatis.Net中就是使用了Castle.DynamicProxy来实现数据库连接等动态操作的。同时在NHibernet等其他框架中也使用到了这个技术。
下面我通过一个简单例子来看一下如何在我们的代码中调用Castle.DynamicProxy:
一般情况下要有三个类:
1、接口类:
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  GSpring.CastleTest
{
    
public interface ITest
    
{
        
string GetName(string pre);
    }

}

2、实现类:
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  GSpring.CastleTest
{
    
public class Test : ITest
    
{
        
public string GetName(string pre)
        
{
            
return pre + ",GSpring";
        }

    }

}

这两个都很普通的接口和实现
3、代理类:
using  System;
using  System.Collections;
using  System.Reflection;
using  Castle.DynamicProxy;

namespace  GSpring.CastleTest
{
    
/// <summary>
    
/// Summary description for DaoProxy.
    
/// </summary>

    public class InterceptorProxy : IInterceptor
    
{
         
public object Intercept(IInvocation invocation, params object[] arguments)
        
{
            Object result 
= null;

            
//这里可以进行数据库连接、打日志、异常处理、权限判断等共通操作
            result = invocation.Proceed(arguments);

            
return result;
        }


    }

}

这个类首先实现接口IInterceptor,然后就可以在方法Intercept中加入我们自己的逻辑

然后看一下调用的方式:
        ProxyGenerator proxyGenerator  =   new  ProxyGenerator();
        IInterceptor handler 
=   new  InterceptorProxy();
        Type[] interfaces 
=   typeof(ITest) } ;
        Test test 
=   new  Test();
        ITest iTest 
=  (proxyGenerator.CreateProxy(interfaces, handler, test)  as  ITest);
        
string  result  =  iTest.GetName( " Hello " );

最后一句调用的地方,实际会首先执行InterceptorProxy类中的Intercept方法。


    本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2007/09/29/910624.html,如需转载请自行联系原作者


相关文章
|
C# 数据安全/隐私保护 开发者
『.NET』.NET 中常用的AOP框架——Castle
📣读完这篇文章里你能收获到 - AOP概念介绍 - 结合具体代码讲解.NET项目接入Castle
253 0
『.NET』.NET 中常用的AOP框架——Castle
|
监控 Java BI
Quartz.NET的使用(附源码)(一)
Quartz.NET的使用(附源码)(一)
402 0
Quartz.NET的使用(附源码)(一)
|
调度
十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务
搭建基于Quartz组件的定时调度任务先在package包项目下,添加Quartz定时器组件:
573 0
十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务
|
调度 Windows 容器
Quartz.NET的使用(附源码)(二)
Quartz.NET的使用(附源码)(二)
277 0
.NET Core 3.0之深入源码理解HttpClientFactory(二)
.NET Core 3.0之深入源码理解HttpClientFactory(二)写在前面上一篇文章讨论了通过在ConfigureServices中调用services.AddHttpClient()方法,并基于此进一步探讨了DefaultHttpClientFactory是如何创建HttpClie...
782 0
|
数据库
一起谈.NET技术,Nhibernate入门与demo
  本篇文章阅读对象是:Nhibernate初学者!如果你是Nhibernate的研究者或者已经很熟练的运用Nhibernate请不吝赐教,对本文不足之处进行指教。   带着问题去学习!学完这些后,希望你能回答下面几个问题:   1、Nhibernate是什么?   2、Nhibernate能做什么?带给我们的什么?   3、怎么搭建Nhibernate?   4、怎么使用Nhibernate?   好,我们就带着这几个问题开始我们的Nhibernate的旅程。
1348 0
|
数据库 数据库连接 SQL
.Net Core 2.0 EntityFrameworkCore CodeFirst入门教程
最近难得有时间闲下来,研究了一下.net core 2.0,总的来说,目前除了一些第三方的库不支持外,基本上可以满足我们的项目需求了! 我们就以一个网站开发为例,搭建一个简单的三层架构,先熟悉一下.net core 2.
1945 0
|
调度 容器 前端开发

热门文章

最新文章