Building Messaging Endpoints in Azure - Evaluating the Landscape

Posts in this series: Evaluating the Landscape When looking at moving traditional on-prem solutions to the cloud, I try as much as possible to avoid any kind of lift-and-shift strategy and instead leverage as many platform-as-a-service (PaaS) offerings as possible. Since our systems mainly consist of web applications backed by some sort of database, it's often a fairly straightforward transition. Web applications become hosted as Azure App Services, and our [Read More]

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]