我正在阅读文档,发现如果不使用接口,那么Windsor只能拦截虚拟方法?
这是Windsor的限制,还是仅仅是C#语言的限制?我在寻找一个深入的答案。
发布于 2011-12-20 21:51:45
C#语言在这里完全无关紧要。问题是在运行时级别拦截是如何工作的。
一种技术是继承类/实现接口并将其用作代理。这显然只能覆盖虚方法和接口方法。我怀疑Windsor使用这种技术。这种技术的优点是它不需要任何特殊的东西。只需在运行时创建一个类。
另一种方法是使用分析API。这允许您修改任何方法的IL,包括非虚拟方法。这是更具侵入性的,通常只在测试遗留代码时使用。
另一种方法是在构建时使用IL重写。这可以在您编写的代码中添加拦截点,但不能在框架代码中添加。
发布于 2011-12-20 21:50:54
也不是。Windsor通过子类化工作,你只能明智地重写虚方法--或者实现接口。
其他任何事情都需要调试器/分析器钩子处于活动状态,这很难做到-一些模拟框架支持ti,尽管它们都不是免费的。
发布于 2011-12-20 21:51:19
这是.NET框架的一个限制。Windsor生成一个动态实现,它要么实现接口,要么重写虚拟成员。.NET不允许重写非虚拟成员。
https://stackoverflow.com/questions/8576434
复制相似问题