做薪酬调查有哪些网站,wordpress大学攻击,企业管理系统网站开发标书,如何注册企业邮箱免费首先见下图#xff08;图一#xff09;#xff0c;其中FooController是一个没有实现任何Interface的空类。需要实现的效果是#xff1a;通过FooController对象调用FooService的Do方法。设置这一不常见的场景主要是为了说明Castle中AdditionalInterfaces的用法。
这个场景诡…首先见下图图一其中FooController是一个没有实现任何Interface的空类。需要实现的效果是通过FooController对象调用FooService的Do方法。设置这一不常见的场景主要是为了说明Castle中AdditionalInterfaces的用法。
这个场景诡异的地方在于FooController是一个空类其类和对象都没什么可供调用的假如FooController也有一个Do方法那么通过Castle给FooController对象添加拦截器就可以轻松实现上述的效果。
基于上述分析方案分两步走
第一步 安装常规的方法创建拦截器并通过拦截器调用FooService的Do方法。拦截器代码见图二。
第二步 动态的给FooController添加Do方法。在Castle中有两种做法一种是使用castle的mixin方式网上已有相关用法的介绍。 本文着重介绍另一种使用方式AdditionalInterfaces。使用其实很简单如图三Component.For(typeof(FooController)).Proxy.AdditionalInterfaces(typeof(IFooService))。 意思就是给FooController类型的代理类添加一个接口IFooService。
最后调用图三 通过 var obj container.ResolveFooController(); 获取FooController的FooController的代理类对象然后通过反射调用其Do方法因为代理类实现了接口IFooService。最后拦截器拦截代理类对象的Do方法完成真正调用FooService的Do方法实名。 图一 图二 图三 图四