当前位置: 首页>>代码示例>>C#>>正文


C# IInterceptor.GetExcepionInterceptors方法代码示例

本文整理汇总了C#中IInterceptor.GetExcepionInterceptors方法的典型用法代码示例。如果您正苦于以下问题:C# IInterceptor.GetExcepionInterceptors方法的具体用法?C# IInterceptor.GetExcepionInterceptors怎么用?C# IInterceptor.GetExcepionInterceptors使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IInterceptor的用法示例。


在下文中一共展示了IInterceptor.GetExcepionInterceptors方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ExcepionIntercept

 private static void ExcepionIntercept(ILGenerator ilGenerator, IInterceptor[] interceptors, LocalBuilder[] local)
 {
     var excepionInterceptors = interceptors.GetExcepionInterceptors();
     if (!excepionInterceptors.Any())
     {
         ilGenerator.Emit(OpCodes.Throw);
         return;
     }
     var invocationType = InternalDynamicTypeProvider.CreateType<IExceptionInvocation>();
     var setException = invocationType.GetMethod("set_Exception");
     var setInterceptedType = invocationType.GetMethod("set_InterceptedType");
     var setInterceptedInstance = invocationType.GetMethod("set_InterceptedInstance");
     var getExceptionHandled = invocationType.GetMethod("get_ExceptionHandled");
     var getExcepionInterceptMethod = typeof(IExceptionInterceptor).GetMethod("OnExcepion");
     var getExcepionInterceptorsMethod = typeof(InterceptorExtends).GetMethod("GetExcepionInterceptors");
     var exceptionLocal = ilGenerator.DeclareLocal(typeof(Exception));
     var interceptorLocal = ilGenerator.DeclareLocal(typeof(IExceptionInterceptor[]));
     var invocationLocal = ilGenerator.DeclareLocal(invocationType);
     var breakExceptionLable = ilGenerator.DefineLabel();
     ilGenerator.StoreLocal(exceptionLocal).LoadLocal(local[0]).Call(getExcepionInterceptorsMethod).StoreLocal(interceptorLocal);
     ilGenerator.New(invocationType.GetConstructor(Type.EmptyTypes)).StoreLocal(invocationLocal);
     ilGenerator.LoadLocal(invocationLocal).LoadLocal(exceptionLocal).Callvirt(setException);
     ilGenerator.LoadLocal(invocationLocal).LoadLocal(local[2]).Callvirt(setInterceptedType);
     ilGenerator.LoadLocal(invocationLocal).This().Callvirt(setInterceptedInstance);
     ilGenerator.ForEach(excepionInterceptors, (il, interceptor, index) =>
     il.LoadLocal(invocationLocal).Callvirt(getExceptionHandled).False(breakExceptionLable).LoadLocal(interceptorLocal).LoadArrayItem(index).
     LoadLocal(invocationLocal).Callvirt(getExcepionInterceptMethod)).MarkLabelFor(breakExceptionLable);
 }
开发者ID:FarseerNet,项目名称:Farseer.Net.DI,代码行数:28,代码来源:DynamicHelper.cs


注:本文中的IInterceptor.GetExcepionInterceptors方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。