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方法。

转载于:https://www.cnblogs.com/zyfking/archive/2009/01/19/1378525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值