Репост из: C# Ready | Unity
Интерсепторы: ловим вызов метода до его выполнения — без сторонних библиотек!
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных Console.WriteLine по всему коду.
Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе DispatchProxy:
using System;
using System.Reflection;
public class LoggingInterceptor : DispatchProxy
{
public T Target { get; set; }
protected override object Invoke(MethodInfo method, object[] args)
{
Console.WriteLine($"➡️ Вызов метода: {method.Name}");
return method.Invoke(Target, args);
}
}
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
// Предположим, есть интерфейс IMyService и класс MyService
IMyService real = new MyService();
var proxy = DispatchProxy.Create();
((LoggingInterceptor)proxy).Target = real;
// Все вызовы пойдут через интерсептор
proxy.DoWork();
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
➡ C# Ready | #практика
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных Console.WriteLine по всему коду.
Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе DispatchProxy:
using System;
using System.Reflection;
public class LoggingInterceptor : DispatchProxy
{
public T Target { get; set; }
protected override object Invoke(MethodInfo method, object[] args)
{
Console.WriteLine($"➡️ Вызов метода: {method.Name}");
return method.Invoke(Target, args);
}
}
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
// Предположим, есть интерфейс IMyService и класс MyService
IMyService real = new MyService();
var proxy = DispatchProxy.Create();
((LoggingInterceptor)proxy).Target = real;
// Все вызовы пойдут через интерсептор
proxy.DoWork();
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
➡ C# Ready | #практика