Composite UIs for Microservices: Vertical Slice APIs

This is a recent follow-up pattern to my series on Composite UIs in Microservices, which explores various strategies for composing at the edges. Other posts in this series: A primer Composition options Client composition Server composition Data composition Vertical Slice APIs When looking at a client-side composition, the next logical question is "how do my client-side components communicate with services?". Typically, there are two main approaches: API Gateway Backend-for-frontend In [Read More]

MediatR 7.0.0 Released

Release notes: MediatR 7.0.0 MediatR.Extensions.Microsoft.DependencyInjection 7.0.0 It's a major release bump because of a breaking change in the API of the post-processor. Enjoy! [Read More]

AutoMapper 8.1.0 Released

Today we released AutoMapper 8.1.0: Upgrade Guide for 8.0 Release Notes AutoMapper 8.1 adds a major new feature - attribute-based maps. Attribute maps let you easily declare maps on destination types when you have straightforward scenarios. Instead of: public class OrderProfile { public OrderProfile() { CreateMap<Order, OrderIndexModel>(); CreateMap<Order, OrderEditModel>(); CreateMap<Order, OrderCreateModel>(); } } You can declare your type maps directly on [Read More]

Sharing Context in MediatR Pipelines

MediatR, a small library that implements the Mediator pattern, helps simplify scenarios when you want a simple in-memory request/response and notification implementation. Once you adopt its pattern, you'll often find many other related patterns start to show up - decorators, chains of responsibility, pattern matching, and more. Everything starts with a very basic implementation - a handler for a request: public interface IRequestHandler<in TRequest, TResponse> where [Read More]

The Curious Case of the JSON BOM

Recently, I was testing some interop with Azure Service Bus, which has a rather useful feature when used with Azure Functions in that you can directly bind JSON to an custom type, to do something like: [FunctionName("SaySomething")] public static void Run([ServiceBusTrigger("Endpoints.SaySomething", Connection = "SbConnection")]SaySomething command, ILogger log) { log.LogInformation($"Incoming message: {command.Message}"); } As long as we have valid JSON, everything should "just work". However, when [Read More]