aop - Ninject拦截扩展中的拦截接口(interface)方法

标签 aop ninject-2 ninject-extensions

我正在玩 Ninject Interception 扩展。 Ian Davis's blog post about 它表明拦截总是基于实际的服务类型,而不是接口(interface)。例如,以下代码将不起作用,因为 IFoo是一个接口(interface):

Kernel.InterceptBefore<IFoo>(f => f.DoSomething(), 
    i => Console.WriteLine("before"));

当然,下一段代码只有在 Foo.DoSomething 时才有效。是 virtual :
Kernel.InterceptBefore<Foo>(f => f.DoSomething(), 
    i => Console.WriteLine("before"));

对于面向方面的编程,这似乎是一个非常明显的漏洞。我对接口(interface)编程非常认真,以便我们可以使用模拟框架来模拟我们的各种服务,但我的绝大多数实际方法实现都不是虚拟的。如果模拟框架可以产生 IFoo使用一种可以满足我要求的方法,Ninject 似乎应该能够做到。

所以我想我的问题有两个:
  • Ninject Interception 是否有任何理由不允许您绑定(bind)到接口(interface)方法?
  • 有没有一种简单的方法可以让 Ninject 绑定(bind)到动态“包装器”类,让我对所有接口(interface)方法执行某些拦截操作,然后将调用传递给真正的实现?
  • 最佳答案

    我对此做了一些调整,似乎有可能将该行为纳入拦截扩展。但正如我们计划在不久的将来发布 2.2 版本一样,您必须要有一点耐心。我很喜欢这个改变,所以我计划将它添加到 2.4。峰值也远没有产生效果。所有当前的单元测试都在运行。但是有很多新的需要添加这个功能。如果你喜欢我可以给你发一个补丁,但我不会给你任何支持和保证它目前没有错误。

    关于aop - Ninject拦截扩展中的拦截接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950965/

    相关文章:

    忍者拦截器

    .net - Ninject 中的 "scope"、 "context"等有什么区别?

    java - 基于 AOP 的对象注入(inject)对于以小写字母开头的类名失败

    spring - org.hibernate.HibernateException : No CurrentSessionContext configured

    c# - 使用 Ninject 进行深度大于 1 的上下文/条件依赖注入(inject)?

    c# - 根据其他值获取对象实例,而不使用服务位置

    c - 你怎么能对没有反射的编程语言感到厌烦呢?

    java - 记录异常并继续执行,代码不会困惑

    c# - 将参数传递给方法绑定(bind)

    c# - Ninject Factory 扩展与 Lazy<T>