Middle+
Чӣ гуна метавон амалро пеш ва баъд аз коркарди дархост иҷро кард, бе истифодаи middleware?
sobes.tech AI
Ҷавоб аз AI
Истифодаи барномасозии асосӣ бо интерцепторҳо, масалан, бо истифода аз китобхонаи Castle Windsor ё AspectCore.
// Мисоли интерфейс барои хидмат
public interface IService
{
void DoSomething(string input);
}
using Castle.DynamicProxy;
// Интерцептор барои логгирӣ
public class LoggingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
// Фаъолият пеш аз коркарди дархост
Console.WriteLine($"Оғози даъвати метод: {invocation.Method.Name}");
try
{
// иҷрои методи аслӣ
invocation.Proceed();
// Фаъолият пас аз коркарди муваффақона
Console.WriteLine($"Метод {invocation.Method.Name} ба муваффақият анҷом ёфт.");
}
catch (Exception ex)
{
// Фаъолият пас аз хато
Console.WriteLine($"Хатогӣ дар даъвати метод {invocation.Method.Name}: {ex.Message}");
throw; // Баргардондани хато
}
}
}
// Мисоли татбиқи хидмат
public class MyService : IService
{
public void DoSomething(string input)
{
Console.WriteLine($"Ҳаракати бо параметр: {input} иҷро мешавад");
// Имоматсияи хато
// if (input == "хато") throw new InvalidOperationException("Баъзе чизҳо нодуруст шуданд");
}
}
using Castle.MicroKernel.Registration;
using Castle.Windsor;
// Бақайдгирии хидмат ва интерцептор дар контейнери IoC
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>());
// Дастрасӣ ба намунаи прокси
var service = container.Resolve<IService>();
service.DoSomething("тест");
// service.DoSomething("хато"); // Барои санҷиши хатоҳо
container.Dispose();
}
}
Ҳамчунин метавон истифода бурд:
- Декоратор (Decorator design pattern): Тартиб додани ороиш дар атрофи синфи аслӣ, ки амалҳоро пеш ва баъд аз даъвати методҳои синфи аслӣ иҷро мекунад.
- Встроиш додани код (Code weaving): Тағйир додани байт-код дар марҳилаи компиляция ё боргирӣ бо истифода аз асбобҳои монанди PostSharp.