Sobes.tech
Middle+

İsteği işlemeden önce ve sonra ara katman (middleware) kullanmadan nasıl işlem yapılabilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ayrıntı odaklı programlama ve interceptor'lar kullanarak, örneğin Castle Windsor veya AspectCore kitaplıkleri ile.

// Bir servis için örnek arayüz
public interface IService
{
    void DoSomething(string input);
}
using Castle.DynamicProxy;

// Günlük kaydı için interceptor
public class LoggingInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        // İşlemden önceki adım
        Console.WriteLine($"Metod çağrısı başlıyor: {invocation.Method.Name}");

        try
        {
            // Orijinal metodu çalıştır
            invocation.Proceed();

            // Başarılı işlem sonrası adım
            Console.WriteLine($"{invocation.Method.Name} metodu başarıyla tamamlandı.");
        }
        catch (Exception ex)
        {
            // Hata durumunda yapılacaklar
            Console.WriteLine($"{invocation.Method.Name} çağrısında hata: {ex.Message}");
            throw; // Hatanın yeniden fırlatılması
        }
    }
}
// Bir servis uygulama örneği
public class MyService : IService
{
    public void DoSomething(string input)
    {
        Console.WriteLine($"Parametre ile işlem yapılıyor: {input}");
        // Hata simülasyonu
        // if (input == "hata") throw new InvalidOperationException("Bir şeyler ters gitti");
    }
}
using Castle.MicroKernel.Registration;
using Castle.Windsor;

// Servis ve interceptor'un IoC konteynerine kaydı
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 örneği alınması
        var service = container.Resolve<IService>();

        service.DoSomething("test");
        // service.DoSomething("hata"); // Hata yönetimini test etmek için yorum satırı kaldırılabilir

        container.Dispose();
    }
}

Ayrıca kullanılabilir:

  • Decorator (Tasarım Deseni Decorator): Orijinal sınıfın etrafına bir sarmalayıcı oluşturmak, bu sarmalayıcı orijinal sınıfın metodlarını çağırmadan önce ve sonra işlemler yapar.
  • Code weaving: Derleme veya yükleme aşamasında, PostSharp gibi araçlar kullanılarak, derleme zamanında veya yükleme sırasında derlemenin bytecode'unu değiştirmek.