美文网首页程序员
Castle 学习 之 动态代理(3)

Castle 学习 之 动态代理(3)

作者: 转交遇见陈绮贞 | 来源:发表于2016-04-18 01:03 被阅读303次

简单了学习一下其他几种代理方式。其实是懒癌

先插入一个小tips:ProxyGenerationOptions,Interceptor[],InterceptorSelector 包含在代理类的Public字段中(proxyGenerationOptions,__selector,__interceptors),通过代理类的构造函数注入(不传InterceptorSelector,则不存在)

    public class Engine : IEngine
    {
        public virtual int CallMethod(string parameter)
        {
            return parameter.Length;
        }
    }

    public class AnsweringEngine : Engine
    {
        public override int CallMethod(string parameter)
        {
            return parameter.Length;
        }
    }
    
    //这里代理Engine类时用其子类AnsweringEngine来作为具体的代理目标
    var service = proxy.CreateClassProxyWithTarget<Engine>(new AnsweringEngine(), logInterceptor);
    
    //代理IEngine接口,具体方法的实现在拦截器中处理,可以传入一个委托来代替拦截方法的实现
    var service = proxy.CreateInterfaceProxyWithoutTarget<IEngine>(new MethodInterceptor(new GetAnswer((string parameter) => parameter.Length)));
    
    //代理IEngine接口,用实现了该接口的AnsweringEngine类作为具体的代理目标
    var service = proxy.CreateInterfaceProxyWithTarget<IEngine>(new AnsweringEngine(), interceptor);
    
    //代理IEngine接口,代理目标也是IEngine接口,具体实现放在继承了IEngine接口的AnsweringEngine对象中
    var service = proxy.CreateInterfaceProxyWithTargetInterface<IEngine>(new AnsweringEngine(), interceptor);
    
    var options = new ProxyGenerationOptions();
    options.AddMixinInstance(new AccountService()); //混合代理
    var service = proxy.CreateClassProxy<Engine>(options);

    ViewBag.Msg = service.CallMethod(name);
    ViewBag.Msg = (service as IAccountService).GetUser(name);

其实感觉大部分情况下都只会用到最开始的类代理,剩下的这这几种作为了解,等到需要的时候再仔细研究。

学习到这里,可以看到Castle的动态代理主要在于多态和里氏替换原则的实际运用,最后配合Emit来动态生成我们想要的代码。

滚回去再看一遍设计模式啦

OO五大原则学起来简单,也容易理解,可是要怎样在实际代码中运用起来呢?阅读别人总结出来的智慧,是为了让我们在今后工作得更加高效,优雅,简洁,任重道远。

相关文章

  • Castle 学习 之 动态代理(3)

    简单了学习一下其他几种代理方式。其实是懒癌 先插入一个小tips:ProxyGenerationOptions,I...

  • Castle 学习 之 动态代理

    前几天看见在项目中用Castle来实现动态代理,觉得很有意思,就找个时间自己研究一下。介绍就免了,那开始吧。 以前...

  • Castle 学习 之 动态代理(2)

    接着上次的学习。 假如我们的代理类有三个需要拦截的方法,其中一个不需要被拦截(在某种情况下,但是在其他时候需要被拦...

  • 动态代理

    动态代理分为两类:1、基于接口的动态代理; (JDK动态代理 )2、基于类的动态代理;(cglib动态代理)3、J...

  • Java 动态代理

    java的动态代理机制详解 JDK动态代理详解 Java核心技术点之动态代理

  • Spring AOP中的动态代理

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: (3)静态代理与动态代理区别...

  • 设计模式~代理模式

    学习代理模式内容: ★ 静态代理、 ★ 动态代理(JDK动态代理、CGLIB动态代理)、 ★ 拦截器的原理和日志记...

  • 代理模式

    1.概念 2.静态代理 3.动态代理 3.1 JDK 动态代理 原理 手工模拟JDK动态代理 3.2cglib动态...

  • 9分钟带你搞懂代理模式、静态代理、JDK+CGLIB动态代理

    目录: 1. 代理模式 2. 静态代理 3. 动态代理 3.1. JDK 动态代理机制 3.2. CGLIB 动态...

  • 代理模式vs装饰模式 and 静态代理vs动态代理

    目录:1.代理模式定义&实现2.装饰模式定义&实现3.静态代理4.动态代理:JDK动态代理、Cglib动态代理5....

网友评论

    本文标题:Castle 学习 之 动态代理(3)

    本文链接:https://www.haomeiwen.com/subject/ffaolttx.html