hexagonal architecture example c#