Comments (4)
I don't know Autofac Interceptors so I can't really help much.
I can tell you, however, that DynamicProxy is unable to intercept sealed methods such as your Calculator
class' Add
and Subtract
. Try making them virtual
and see what happens.
Depending on how exactly Autofac Interceptors makes use of DynamicProxy, they might even be able to get this to work for you automatically by re-implementing ICalculator
, then intercept those interface methods, and possibly forward to the Calculator
class' implementations if so desired. But you'd need to have a discussion about that with their team.
from core.
It does intercept Add() and Subtract() even though they aren't virtual, which goes against what's in the documentation.
Infact, it intercepts all public methods on Calculator(), except when one of these methods invokes another public method inside the same class. It only appears to intercept the very first call.
I did try making them all virtual but the behaviour is the same.
from core.
If Autofac Interceptors intercepts your sealed Calculator
methods (or at least you think that this is what it does), it is much more likely that it actually reimplements ICalculator
in the proxy subclass (which derives from Calculator
) and intercepts those methods. If these methods then delegate to the base class implementation, and those base class methods call each other (while seeing this
typed as Calculator
instead of ICalculator
), then interception is effectively bypassed, since the method implementations that kick off the interception sit in the more derived proxy subclass and the base class implementations never call those.
This isn't a problem with DynamicProxy, but with the specific usage pattern found in Autofac Interceptors. I have to refer you back to their team, there's nothing wrong with DynamicProxy if my guess is correct, and there's nothing we can do here.
from core.
Hi, thanks for looking into this. After much investigation over the weekend, I discovered that the interception was working to spec. The sub interception I had been told by a more experienced developer for this application wasn't actually happening, and there was other application code in play.
Sorry for wasting your time on this, but it was very interesting looking through the source.
from core.
Related Issues (20)
- Not Intercepted Method is invoked on target, not on proxy. HOT 5
- Random VerificationException/TypeLoadException HOT 5
- it's very slow to create proxy HOT 2
- Log4Net not listed in dependencies HOT 4
- `InvalidProgramException` when proxying `MemoryStream` with .NET 7 HOT 15
- Proxy created with CreateClassProxyWithTarget returns false for Equals on itself HOT 3
- Why TransactionInterceptor.Intercept run at the client HOT 2
- System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. HOT 1
- `ArgumentException`: "Could not find method overriding method" with overridden class method having generic by-ref parameter HOT 3
- `ArgumentException`: "Cannot create an instance of `TEnum` because `Type.ContainsGenericParameters` is true" caused by `Enum` constraint on method `out` parameter HOT 4
- Proxy fail to create for create substitute that returns a derived class from abstract that satisfies interface implicitly HOT 5
- Release 5.2.0 HOT 1
- Support by-ref-like (`ref struct`) parameter types such as `Span<T>` and `ReadOnlySpan<T>` HOT 10
- Support "with" for record proxies HOT 4
- CreateInterfaceProxyWithoutTarget and BaseTypeForInterfaceProxy-member
- DictionaryAdapter Nesting Dictionaries JSON like
- Allow to intercept IAsyncEnumerable HOT 1
- ProxyGenerator leaking HOT 2
- MissingMethodException when trying to call a proxy target from different project
- .NET 9 compatibility: Signature of the body and declaration in a method implementation do not match HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from core.