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.