Skip to content

Instantly share code, notes, and snippets.

https://api.codemagic.io/artifacts/f64bd209-fc06-4419-97f4-d042ccb10224/73548ac2-d393-41bc-b867-59a553bece6a/Dit_Pusterum.app.zip
[
{
"productId": "1",
"productName": "Basic t-shirt",
"productDescription": "a quiet t-shirt",
"price": { "amount" : 40, "currency": "eur" },
"attributes" : [
{
"sizes": [ "s", "m", "l"],
"colors": ["red", "blue", "green"]
@horsdal
horsdal / docker-commands.ps
Created February 16, 2019 07:14
Docker commands to build self-contained .NET Core app
> docker build . -t dbup:latest
> docker run --rm -v $pwd/output/:/src/bin/ dbup:latest
@horsdal
horsdal / Dockerfile
Created February 15, 2019 08:29
Build self container .NET Core app
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY . .
RUN dotnet restore DbUp.csproj
ENTRYPOINT ["dotnet", "publish", "-r", "linux-x64", "-c", "release", "--self-contained"]
@horsdal
horsdal / EventHandlerDispatcher.cs
Last active October 22, 2018 15:56
Marten async event handler prototype
public static class StoreOptionsExtensions
{
public static void AddAsyncEventHandlers(this StoreOptions options, Func<Type, IEnumerable<object>> handlerFactory)
{
options.Listeners.Add(new EventDispatcher(handlerFactory));
}
}
public class EventDispatcher : DocumentSessionListenerBase
{
public class UserAggregate : Aggregate<UserAggregate>
{
public string Username { get; internal set; } = String.Empty;
public string Email { get; internal set; } = String.Empty;
}
public abstract class Aggregate<T> where T : Aggregate<T>
{
private readonly List<Event<T>> newEvents = new List<Event<T>>();
public Guid Id { get; protected internal set; }
public IEnumerable<Event<T>> NewEvents => this.newEvents.AsReadOnly();
public void Replay(List<Event<T>> events)
{
foreach (var @event in events)
Play(@event);
using MediatR;
public interface Event<T> : INotification where T : Aggregate<T>
{
void When(T aggregate);
}
public class UsernameChangedEvent : Event<UserAggregate>
{
public string Username { get; }
public Guid Id { get; }
public string OldUsername { get; }
public UsernameChangedEvent(string username, Guid id, string oldUsername)
{
this.Username = username;
this.Id = id;
public class UsernameChangedEvent : Event
{
public string Username { get; }
public Guid Id { get; }
public string OldUsername { get; }
public UsernameChangedEvent(string username, Guid id, string oldUsername)
{
this.Username = username;
this.Id = id;