Decorator — add behavior dynamically.
Implementation:
1public interface IOrderService2{3 Task<Order> CreateAsync(CreateOrderDto dto);4}56public class LoggingOrderService(IOrderService inner) : IOrderService7{8 public async Task<Order> CreateAsync(CreateOrderDto dto)9 {10 Console.WriteLine("Creating order...");11 var order = await inner.CreateAsync(dto);12 Console.WriteLine($"Order {order.Id} created");13 return order;14 }15}
DI registration:
1builder.Services.AddScoped<OrderService>();2builder.Services.AddScoped<IOrderService>(sp =>3 new LoggingOrderService(sp.GetRequiredService<OrderService>()));
Key: Decorator for behavior extension.