Ninject如何设置可选方法拦截?假设我有一个类,我希望有时*(但现在总是)拦截一些(但不是全部)方法。按照我的理解,它可以在我的Ninject模块中使用InterceptAround()(在更高级别的代码中),或者在这些方法上使用InterceptAttribute派生属性(在实现级别)来完成。我真的不喜欢第一种方法,因为它需要消费者了解细节,有很多类和很多方法。但我也不喜欢第二种方式,因为我看不到如何禁用(或者更确切地说,不启用)拦截,因为属性与代码融合在一起。有什么已知的方法可以解决这个问题吗?*:在应用程序的生命周期内。听起来您指的是普通的动态拦截器,这就是NinjectInterception扩展默认情况下的工作方式。下面是一个条件拦截的例子:调用.Proceed();您可以像这样将它直接绑定到单个类:}}如果你想动态地拦截单个类,这就是你所要做的。内核扩展看起来很有前途,因为它们允许您直接在语句中编写条件:kernel.Intercept(ctx=>ctx.Request.Service==typeof(IFoo)).With();但是,如果您尝试编写条件,那么对正在执行的方法做出决定并不是特别有用,因为这只会让您访问绑定上下文,而不是调用。主要是,此扩展的存在使您可以选择在运行时拦截哪些类或服务(而不是方法)。最好坚持绑定语法并将运行或不运行的逻辑直接写入拦截器,如第一个示例所示。需要注意的一件重要事情是,动态拦截器实际上会针对它绑定到的任何类上的每个(公共/虚拟)方法运行,这可能非常低效。不幸的是,Ninject拦截扩展必须采用最低公分母方法,因为它旨在支持多个代理库。如果直接使用Castle,可以使用proxygenerationhooks和interceptorselectors进行细粒度控制,这其实是比较推荐的做法。据我从Ninject-DP2源代码中了解到,Ninject扩展不支持此功能。就个人而言,出于这个原因,我在NinjectInterception扩展方面从未取得过太大成功,并且倾向于直接坚持使用CastleDP2。但是,如果您是在小范围内执行此操作并且不编写对性能敏感的应用程序,那么编写动态拦截器应该没问题。以上是C#学习教程:如何使用Ninject设置可选方法拦截?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
