Sobes.tech
Middle+

Sorğunun işlənməsindən əvvəl və sonra hərəkəti middleware istifadə etmədən necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Əsasən aspekt yönümlü proqramlaşdırma və interceptors istifadə edərək, məsələn, Castle Windsor və ya AspectCore kitabxanası ilə.

// Xidmət üçün nümunə interfeys
public interface IService
{
    void DoSomething(string input);
}
using Castle.DynamicProxy;

// Loglama üçün interceptor
public class LoggingInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        // Sorğudan əvvəlki fəaliyyət
        Console.WriteLine($"Metod çağırışına başlanır: {invocation.Method.Name}");

        try
        {
            // Əsas metodu icra et
            invocation.Proceed();

            // Uğurlu emaldan sonra fəaliyyət
            Console.WriteLine($"{invocation.Method.Name} metodu uğurla yerinə yetirildi.");
        }
        catch (Exception ex)
        {
            // Xəta baş verərsə fəaliyyət
            Console.WriteLine($"{invocation.Method.Name} metod çağırışında xəta: {ex.Message}");
            throw; // Xətanı yenidən at
        }
    }
}
// Xidmətin nümunə tətbiqi
public class MyService : IService
{
    public void DoSomething(string input)
    {
        Console.WriteLine($"Parametr ilə fəaliyyət: {input}");
        // Xəta simulyasiyası
        // if (input == "xəta") throw new InvalidOperationException("Nə isə səhv getdi");
    }
}
using Castle.MicroKernel.Registration;
using Castle.Windsor;

// IoC konteynerində xidmət və interceptoru qeydiyyatı
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 nümunəsini əldə et
        var service = container.Resolve<IService>();

        service.DoSomething("test");
        // service.DoSomething("xəta"); // Xətaların idarə olunmasını yoxlamaq üçün şərh çıxar

        container.Dispose();
    }
}

Həmçinin istifadə oluna bilər:

  • Dekorator (Dizayn nümunəsi Decorator): Orijinal sinifin ətrafında bir qabıq yaratmaq, bu qabıq orijinal sinif metodlarını çağırmadan əvvəl və sonra fəaliyyət göstərir.
  • Code weaving: Kompilyasiya və ya yükləmə mərhələsində, PostSharp kimi alətlərdən istifadə edərək, bytecode-u dəyişdirmək.