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