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.