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.Resolve<FooController>(); 获取FooController的FooController的代理类对象,然后通过反射调用其Do方法(因为代理类实现了接口IFooService)。最后拦截器拦截代理类对象的Do方法,完成真正调用FooService的Do方法实名。
(图一)
(图二)
(图三)
(图四)
相关文章
- this指针的介绍和用法
- 2、wxWidgets介绍–菜单栏、状态栏、图标简介
- C# List用法 List 实列介绍
- 微信公众号-公众号介绍
- 【说站】mysql InnoDB存储引擎的介绍
- SAP 电商云 Spartacus UI UrlMatcherService 的用法介绍
- Ansible的条件判断介绍和使用方式详解!
- Kafka快速入门(介绍)
- Imagenomic Portraiture 4 for mac(磨皮滤镜ps和lr插件) 特色介绍
- SQL开发知识:Oracle中的SUM用法介绍
- SQL开发知识:oracle分析函数与聚合函数的用法介绍
- Oracle MERGE INTO的用法示例介绍
- Oracle中的或操作:介绍与用法(Oracle或运算)
- MySQL中Case的使用方式介绍(mysqlcase用法)
- MySQL课程:简要介绍(mysql课程介绍)
- 及特性Linux分支及其独特特性介绍(linux的分支)
- 强力掌控数据:Oracle触发器类型介绍(oracle触发器类型)
- MySQL中IF函数的使用方法介绍(mysql中if函数用法)
- MySQL存储过程的基本用法介绍
- php循环语句for()与foreach()用法区别介绍
- C#观察者模式实例介绍
- hover的用法及live的用法介绍(鼠标悬停效果)
- PHP关于访问控制的和运算符优先级介绍
- window.opener用法和用途实例介绍
- jQuery中RadioButtonList的功能及用法实例介绍
- jsswitchcasedefault的用法示例介绍
- ASP.NETDictionary的基本用法示例介绍
- jsjqueryajax的几种用法总结(及优缺点介绍)
- JSONP跨域的原理解析及其实现介绍
- OracleMERGEINTO的用法示例介绍
- Javascript的严格模式strictmode详细介绍
- document.forms用法示例介绍
- JavaScript中的包装对象介绍