Tag: 拦截

Unity拦截GetCustomAttribute

在此先感谢您的帮助! (是的,底部有一个问题) 我正在使用Unity 3.x Interception来执行AOP之前和之后的数据库连接和事务活动。 数据库拦截器始终是实例化的,并且事务拦截器是基于CustomAttributeMatchingRule的,都是通过InterfaceInterceptor实现的。 我有在TransactionAttribute中设置的属性: [Transaction(IsolationLevel.ReadUncommitted, NoRollbackFor = new[] { typeof(TestException) })] 作为一个例子,我在我的unit testing中使用。 我想在我的TransactionCallHandler类调用方法中访问它们。 我见过这样的例子 var transactionAttribute = input.MethodBase.GetCustomAttribute(false); 是访问它的方法,但我的事务var是null。 我的结论是正在检查拦截代理类的自定义属性而不是原始的具体实例。 我的工作原理是反映一直回到类级别,深入挖掘出被拦截的正确方法,并从那里执行get自定义属性。 var methods = input .Target .GetType() .GetMethods() .Where(m => m.Name == input.MethodBase.Name) .Where(m => m.GetCustomAttribute(false) != null); (还有大约30行代码,以确保我没有访问错误的方法名称,如果方法有重载;因此性能拖延……) 所以,毕竟,我的问题是:我没有正确地执行reflection吗? 我应该报告Unity中的错误吗? 这是我的容器定义: Container = new UnityContainer(); Container.AddNewExtension(); Container.RegisterType( new InterceptionBehavior(), new […]

如何通过reflection获取透明代理的属性值?

我的代码接收透明代理而不是原始实例。 虽然这个var type = obj.GetType(); 产生原始类的类型,以下代码抛出TargetException : 对象与目标类型不匹配 var value = property.GetValue(obj, null); 其中property是type.GetProperties()

如何拦截Http流量

我正在尝试开发一个C#应用程序,它将拦截传出的Http请求并将结果返回给旧系统。 我们有一个遗留系统,它向已停产的Web服务发出Http请求。 我需要拦截即将发出的请求并将其发送到新的Web服务。 当响应返回时,我需要操纵它然后将其发送到遗留系统。 所有代码都需要位于客户端计算机上。 我认为http听众的方式可行,但我没有得到任何结果,任何建议将不胜感激。

我如何使用断路器?

我正在寻找在我的控制之外远程调用服务的方法,直到连接成功为止。 我也不想简单地设置一个定时器,每隔n秒/分钟执行一次动作,直到成功为止。 经过一系列研究后,似乎断路器模式非常适合。 我找到了一个使用Castle Windsor拦截器的实现,看起来很棒。 唯一的问题是我不知道如何使用它。 从我发现的关于该主题的几篇文章中,我能够找到的唯一用法示例是简单地使用断路器仅调用一次动作,这似乎不太有用。 从那看起来我需要在一段while(true)循环中使用断路器简单地运行我的动作。 我如何使用Windsor拦截器执行一个动作来调用外部服务,直到它成功而不会关闭我们的服务器? 有人可以填写缺失的部分吗? 这是我能想到的 while(true) { try { service.Subscribe(); break; } catch (Exception e) { Console.WriteLine(“Gotcha!”); Thread.Sleep(TimeSpan.FromSeconds(10)); } } Console.WriteLine(“Success!”); public interface IService { void Subscribe(); } public class Service : IService { private readonly Random _random = new Random(); public void Subscribe() { var a = _random.Next(0, […]

如何在Castle.DynamicProxy中使用IInterceptor?

我写了一个这样的例子 简单计算器类: public class Calculator { public int Add(int a, int b) { return a + b; } } 实现了DynamicProxy提供的“IInterceptor” [Serializable] public abstract class Interceptor : IInterceptor { public void Intercept(IInvocation invocation) { ExecuteBefore(invocation); invocation.Proceed(); ExecuteAfter(invocation); } protected abstract void ExecuteAfter(IInvocation invocation); protected abstract void ExecuteBefore(IInvocation invocation); } 创建了一个Interceptor类,并inheritance自“Interceptor”类 public class CalculatorInterceptor : Interceptor { […]

拦截C#中应用程序中所有控件的单击事件(WinForms)

我想创建一个应用程序来截取我的应用程序的所有forms的所有UI事件,并将它们写入日志。 这些数据可用于查看哪些控件使用最多,顺序是什么等。问题是我希望这是自动发生的,而不修改现有的类。 我制作了一个原型,将一个方法附加到表单中所有控件的click事件,但是如何为所有表单执行此操作? 在操作事件时,Reflection需要一个目标对象,但只能轻松访问启动表单。 有没有办法挂钩对象的构造函数? 然后我可以在新表格的所有事件中“注入”我的方法。 或许还有另一种方法可以做到这一点。 提前致谢!

按属性划分C#unity拦截

有没有办法在C#unity中如何使用属性拦截并将对象注册代码保存在XML文件中(如app.config)? 如果是的话,你能为我提供代码,这样的注册应该怎么样? 我做了很多解决方法,但没有找到解决此问题的方法。

拦截方法调用

有没有办法拦截一些方法调用而不对方法本身进行任何代码更改? 我不需要在运行时注入任何自定义行为,只需将自定义性能日志记录添加到现有项目。