博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Castle中AdditionalInterfaces用法介绍
阅读量:7038 次
发布时间:2019-06-28

本文共 769 字,大约阅读时间需要 2 分钟。

首先见下图(图一),其中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.Resolve<FooController>(); 获取FooController的FooController的代理类对象,然后通过反射调用其Do方法(因为代理类实现了接口IFooService)。最后拦截器拦截代理类对象的Do方法,完成真正调用FooService的Do方法实名。

(图一)

 

(图二)

 

(图三)

 

(图四)

 

转载地址:http://nxnal.baihongyu.com/

你可能感兴趣的文章
Linux Ubuntu 16.04 主机名设置
查看>>
解码,
查看>>
CCNP 静态路由
查看>>
单链表二[不带头节点链表]
查看>>
xml解析——增删改查操作后将其修改结果保存
查看>>
49.C#--多态之抽象类
查看>>
Html中居中问题小结
查看>>
Spring mvc 拦截器
查看>>
MySQL GROUP BY 和GROUP_CONCAT的一些用法
查看>>
关于box2d的例子testbed
查看>>
## mysqldump 导出数据库各参数详细说明
查看>>
2.5.3 svn文件
查看>>
python
查看>>
43.防盗链配置、访问控制Directory、访问控制FilesMatch
查看>>
静态代理、动态代理,以及动态代理的调用说明
查看>>
centos7中配置rsync+inotify实现自动监控数据同步
查看>>
袋鼠云数据中台专栏2.0 | 数据中台之数据源
查看>>
部署Docker
查看>>
网络高可用衡量指标99 999 9999 99999 99% 99.9% 99.99% 99.999
查看>>
推荐稀奇古怪好玩有用的app 看到的都想收藏!
查看>>