我正在玩 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 似乎应该能够做到。所以我想我的问题有两个:
最佳答案
我对此做了一些调整,似乎有可能将该行为纳入拦截扩展。但正如我们计划在不久的将来发布 2.2 版本一样,您必须要有一点耐心。我很喜欢这个改变,所以我计划将它添加到 2.4。峰值也远没有产生效果。所有当前的单元测试都在运行。但是有很多新的需要添加这个功能。如果你喜欢我可以给你发一个补丁,但我不会给你任何支持和保证它目前没有错误。
关于aop - Ninject拦截扩展中的拦截接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950965/