- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unity3D技术之使用Unity进行AOP对象拦截
HYPERLINK / Unity是一款知名的依赖注入容器,其支持通过自定义扩展来扩充功能。在Unity软件包内默认包含了一个对象拦截(Interception)扩展定义。本篇文章将介绍如何使用对象拦截功能来帮助你分离横切关注点(Separation of cross-cutting concerns)。
对象拦截简介
对象拦截是一种 HYPERLINK /wiki/Aspect-oriented_programming AOP(Aspect-oriented programming)编程的实践方法。其可帮助你保持业务类的纯净,而无需考虑诸如日志和缓存等外围关注点。
在.NET中,实现AOP有多种方法。一种方式是采用编译后处理方式,例如 HYPERLINK /customers PostSharp。在编译后,PostSharp通过修改IL代码来诸如横切代码。
相反地,对象拦截是在运行时执行的,同时也意味着会有一些限制。依据不同的拦截器实现,会有如下这些约束:
透明代理拦截器:需要定义接口,或者要求类继承自MarshalByRefObject。
接口拦截器:需要定义接口。
虚方法拦截器:仅需要方法被定义成virtual方法。
对象拦截如何工作
当从Unity容器请求目标对象时,将不会获取到已配置的类的实例。实际上,将得到一个动态生成的代理对象,或者一个衍生类。
如果调用代理对象的一个方法,将可以在被调用方法执行前或执行后执行一些额外行为的代码。那些定义行为的类需要实现ICallHandler接口。通过这些行为定义,我们可以访问方法调用的参数列表 HYPERLINK 【狗刨学习网】,可以吞噬异常,或者可以返回自定义的异常。
附带提一下,在不使用Unity容器的条件下,也是可以使用Unity拦截器的。
示例:将异常和方法调用参数列表记录到日志中
在下面的示例中,我们将创建两个自定义的行为,都实现了ICallHandler接口:
LoggerCallHandler:将方法调用参数列表记录到日志中。
ExceptionLoggerCallHandler:将方法调用参数列表和异常信息及调用栈记录到日志中。
ExceptionLoggerCallHandler定义如下:
1 internal class ExceptionLoggerCallHandler : ICallHandler
2 {
3 public IMethodReturn Invoke(
4 IMethodInvocation input, GetNextHandlerDelegate getNext)
5 {
6 IMethodReturn result = getNext()(input, getNext);
7 if (result.Exception != null)
8 {
9 Console.WriteLine(ExceptionLoggerCallHandler:);
10 Console.WriteLine(\tParameters:);
11 for (int i = 0; i input.Arguments.Count; i++)
12 {
13 var parameter = input.Arguments[i];
14 Console.WriteLine(
15 string.Format(\t\tParam{0} - {1}, i, parameter.ToString()));
16 }
17 Console.WriteLine();
18 Console.WriteLine(Exception occured: );
19 Console.WriteLine(
20 string.Format(\tException - {0}, result.Exception.Message));
21
22 Console.WriteLine();
23 Console.WriteLine(StackTrace:);
24 Console.WriteLine(Environment.StackTrace);
25 }
26
27 return result;
28 }
29
30 public int Order { get; set; }
31 }
为了
您可能关注的文档
最近下载
- GB50709-2011 钢铁企业管道支架设计规范.pdf VIP
- 压力性损伤护理与管理能力提升题库答案-2025年华医网继续教育.docx VIP
- 基因多态性与疾病易感性-洞察及研究.docx VIP
- 三位一体煅烧炉生产无水氟化铝工艺说明 .pdf VIP
- 卵巢囊肿蒂扭转急诊护理查房.pptx VIP
- 《中华人民共和国国歌》PPT课件.ppt VIP
- 2025年航空货运行业市场规模及未来五到十年发展趋势报告.docx
- 初中八年级全套体育教案(共36课).docx VIP
- 50045 GBJ45-82 高层民用建筑设计防火规范.pdf VIP
- 股市主力操盘盘 口摩斯密码(原创内容,侵权必究).pptx
文档评论(0)