У меня есть объект, полученный из абстрактного базового класса, и я хочу перехватить метод объекта.
Поддерживает ли DynamicProxy этот сценарий?Кажется, я могу создавать прокси только по интерфейсу или без цели, но не по абстрактному базовому классу с целью
public abstract class Sandwich
{
public abstract void ShareWithFriend();
}
public sealed class PastramiSandwich : Sandwich
{
public override void ShareWithFriend()
{
throw new NotSupportedException("No way, dude");
}
}
class SandwichInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
}
catch (NotSupportedException)
{
// too bad
}
}
}
internal class Program
{
private static void Main()
{
var sandwich = new PastramiSandwich();
var generator = new ProxyGenerator();
// throws ArgumentException("specified type is not an interface")
var proxy1 = generator.CreateInterfaceProxyWithTarget<Sandwich>(
sandwich,
new SandwichInterceptor());
proxy1.ShareWithFriend();
// does not accept a target
var proxy2 = generator.CreateClassProxy<Sandwich>(
/* sandwich?, */
new SandwichInterceptor());
// hence the method call fails in the interceptor
proxy2.ShareWithFriend();
}
}