我正在玩Ninject Interception扩展程序。关于它的Ian Davis's blog post表示拦截始终基于实际的服务类型,而不是接口。例如,以下代码无效,因为IFoo
是一个接口:
Kernel.InterceptBefore<IFoo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
当然,下一个代码段仅在Foo.DoSomething
为virtual
时才有效:
Kernel.InterceptBefore<Foo>(f => f.DoSomething(),
i => Console.WriteLine("before"));
在面向方面的编程方面,这似乎是一个相当明显的漏洞。我一直非常认真地对接口进行编程,以便我们可以使用模拟框架来模拟我们的各种服务,但绝大多数实际的方法实现都不是虚拟的。如果一个模拟框架可以生成一个IFoo
,其方法可以满足我的要求,那么Ninject似乎应该可以。
所以我想我的问题是双重的:
答案 0 :(得分:5)
我对此做了一些尖峰,似乎可以将这种行为纳入拦截扩展。但是,由于我们计划在不久的将来发布2.2版本,你必须要有点耐心。我非常喜欢这个改变所以我打算把它添加到2.4。穗也远没有生产力。所有当前的单元测试都在运行。但是有很多新功能需要添加此功能。如果你愿意,我可以给你发一个补丁,但我不会给你任何支持和保证,目前它没有错误。