Enterprise Library
来源:互联网 发布:手机后期制作软件 编辑:程序博客网 时间:2024/04/27 10:32
- 模块介绍
- PolicyInjection
- PolicyInjection模块
- 简单示例
- 主方法
- 业务类
- 自定义CallHandler
- 自定义LogHandlerAttribute
- ICallHandler
- Invoke方法
- Order
- 调用具体方法
- input
- getNext
- IMethodReturn
- 抛出异常
- 简单示例
基于Enterprise Library6.0版本
模块介绍
PolicyInjection
PolicyInjection模块是在企业库3.0才正式引入的模块,简称PIAB(Policy Injection Application Block),这个模块的主要功能是方便我们在项目开发中进行AOP(面向切面编程),以简化开发内容。
PolicyInjection模块
简单示例
演示利用PolicyInjection模块在方法执行前和后打印调用日志
主方法
IConfigurationSource configurationSource = ConfigurationSourceFactory.Create(); PolicyInjector policyInjector = new PolicyInjector(configurationSource); PolicyInjection.SetPolicyInjector(policyInjector); Operation o = policyInjector.Create<Operation>(); o.Run(); Console.Read();
业务类
业务类必须继承自MarshalByRefObject。
public class Operation : MarshalByRefObject { [LogHandler] public void Run() { Console.WriteLine("执行了方法1"); } }
自定义CallHandler
public class LogHandler : ICallHandler { public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { Console.WriteLine("方法前执行"); IMethodReturn result = getNext().Invoke(input, getNext); Console.WriteLine("方法后执行"); return result; } public int Order { get; set; } }
自定义LogHandlerAttribute
对方法拦截有两种方式,Attribute拦截,Configuration拦截.示例采用第一种方式.
定义后,只要在方法上标明该Attribute则会调用响应的LogHandler.
public class LogHandlerAttribute : HandlerAttribute{ public override ICallHandler CreateHandler(Microsoft.Practices.Unity.IUnityContainer container) { return new LogHandler(); }}
ICallHandler
Invoke方法
invoke方法用于对具体拦截方法做相应的处理
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
Order
多个Handler调用的先后顺序
private int _order = 0;public int Order{ get { return _order; } set { _order = value; }}
调用具体方法
var result = getNext()(input, getNext);
input
这个参数中封装了已拦截的方法、方法的参数等有用的信息
inputs 传入的参数值和参数类型。
InvocationContext
MethodBase 注入的方法
Target 注入的类
getNext
一个委托,用于调用拦截的方法,通过这个委托我们可以很好的控制我们需要在拦截了具体方法后如何进行具体的业务逻辑操作。
IMethodReturn
调用后的返回值
Exception 调用中的异常
InvocationContext
Outputs 输出参数
ReturnValue 返回值
抛出异常
if(result.Excepiton!=null){ return input.CreateExceptionMethodReturn(new Exception("Permission Denied")); }
0 0
- Enterprise Library
- Enterprise Library
- Microsoft Enterprise Library 发布
- Enterprise Library 集锦
- 企业程序库(Enterprise Library))
- Enterprise Library 3.0 发布
- Enterprise library部分说明
- Enterprise Library链接数据库
- Enterprise Library之日志。
- Enterprise Library 之缓存
- Enterprise Library系列
- 来说说enterprise library
- 2.2 构建 Enterprise Library
- 3.1 Enterprise Library 内核
- Enterprise Library简介
- 3.6 [ Enterprise Library ] 单元测试
- Enterprise Library设计模式
- Enterprise Library 3.1 介绍
- python下安装networkx
- 制作swap的方法
- OpenGL解析法绘制旋转曲面--青花瓷
- 电话通信PSTN及物理知识整理,VOIP发展梳理
- 化学绘图软件ChemFinder怎样连接数据库
- Enterprise Library
- (2)JavaScript中的函数
- 用Android studio2.3打jar包失败,没有生成相应的jar包。
- 解决VMWARE 虚拟机下 kali linux 没有声音的问题
- 呵呵呵
- Problem H. Game with the Stones 博弈论
- LeetCode#343. Integer Break
- 原生JS实现base64解码与编码
- 我们公司也是这样的架构