Sobes.tech
Middle+

So'rovni qayta ishlashdan oldin va keyin harakatni middleware (o'rta qatlam) ishlatmasdan qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Aspect-oriented programming with interceptors, for example using the Castle Windsor or AspectCore libraries.

// Service uchun interfeys misoli
public interface IService
{
    void DoSomething(string input);
}
using Castle.DynamicProxy;

// Logging uchun interceptor
public class LoggingInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        // So'rovdan oldin amal
        Console.WriteLine($"Method chaqiruvi boshlanishi: {invocation.Method.Name}");

        try
        {
            // Asl metodni bajarish
            invocation.Proceed();

            // Muvaffaqiyatli bajarilgandan keyin amal
            Console.WriteLine($"{invocation.Method.Name} metodi muvaffaqiyatli bajarildi.");
        }
        catch (Exception ex)
        {
            // Xatolik bo'lsa amal
            Console.WriteLine($"{invocation.Method.Name} metod chaqiruvida xato: {ex.Message}");
            throw; // Xatoni qayta tashlash
        }
    }
}
// Service implementatsiyasi misoli
public class MyService : IService
{
    public void DoSomething(string input)
    {
        Console.WriteLine($"Parametr bilan amal: {input}");
        // Xatolikni simulyatsiya qilish
        // if (input == "xato") throw new InvalidOperationException("Nimadir noto'g'ri ketmoqda");
    }
}
using Castle.MicroKernel.Registration;
using Castle.Windsor;

// IoC konteynerda service va interceptorni ro'yxatdan o'tkazish
public class Program
{
    public static void Main(string[] args)
    {
        var container = new WindsorContainer();

        container.Register(Component.For<LoggingInterceptor>());
        container.Register(Component.For<IService>().ImplementedBy<MyService>().Interceptors<LoggingInterceptor>());

        // Proxy instanceini olish
        var service = container.Resolve<IService>();

        service.DoSomething("test");
        // service.DoSomething("xato"); // Xatolarni tekshirish uchun izohni olib tashlang

        container.Dispose();
    }
}

Shuningdek foydalanish mumkin:

  • Decorator (dizayn naqsh Decorator): Asl klass atrofida o'ram yaratish, bu o'ram asl klass metodlarini chaqirishdan oldin va keyin amal bajaradi.
  • Code weaving: Kompilatsiya yoki yuklash bosqichida, PostSharp kabi vositalar yordamida, bytecode ni o'zgartirish.