Skip to content

Instantly share code, notes, and snippets.

View jasonmitchell's full-sized avatar

Jason Mitchell jasonmitchell

View GitHub Profile
MemDb: true
Log: .\2113-logs
IntIp: 127.0.0.1
ExtIp: 127.0.0.1
IntTcpPort: 1112
ExtTcpPort: 1113
IntHttpPort: 2112
ExtHttpPort: 2113
IntHttpPrefixes: http://*:2112/
ExtHttpPrefixes: http://*:2113/
@jasonmitchell
jasonmitchell / Aggregate.cs
Created April 1, 2017 22:09
Event Sourced Aggregates
using System;
using System.Collections.Generic;
namespace Aggregates
{
public abstract class Aggregate : IAggregate
{
private readonly Dictionary<Type, Action<object>> handlers = new Dictionary<Type, Action<object>>();
private readonly Queue<object> uncommittedEvents = new Queue<object>();
private int version;
[Fact]
public async Task ReadsEventsFromStream()
{
// Create a connection to the embedded event store.
using (var connection = EmbeddedEventStoreConnection.Create(_node, _connectionSettingsBuilder))
{
// Write some events - omitted for clarity
// When reading from a stream you can specify the start position and how many events to read.
// The maximum number of events that can be read in one call is 4096 to large streams would require reading in pages.
class Order : Aggregate
{
static Order()
{
Given<Order, OrderStarted>((x, e) =>
{
x.Id = e.Id;
x.customerId = e.CustomerId;
x.status = OrderStatus.Open;
x.tickets = new List<Ticket>();

Keybase proof

I hereby claim:

  • I am jasonmitchell on github.
  • I am jasonmitchell (https://keybase.io/jasonmitchell) on keybase.
  • I have a public key whose fingerprint is BD48 5BB9 3F4D 1463 BE4E CE8E C9BC 9458 59A1 B9DC

To claim this, I am signing this object:

fromCategory('MyOldStreamCategory')
.whenAny(function (s, e) {
var newStreamName = e.streamId.replace('MyOldStreamCategory', 'MyNewStreamCategory');
emit(newStreamName, e.eventType, e.data, e.metadata);
})
@model Quickstart.Web.Models.Person
@section scripts
{
<script type="text/javascript" src="/Scripts/ViewModels/AjaxModelLoading.js"></script>
<script type="text/javascript">
var viewModel = new AjaxModelLoading("@Url.Action("AjaxModelLoading")");
ko.applyBindings(viewModel);
viewModel.getRandomModel();
@using Quickstart.Web.Extensions
@model Quickstart.Web.Models.Person
@section scripts
{
<script type="text/javascript">
var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()));
ko.applyBindings(viewModel);
</script>
}
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace Quickstart.Web.Extensions
{
public static class ObjectExtensions
{
public static string ToJson(this object obj)
{
JsonSerializerSettings serializerSettings = new JsonSerializerSettings
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ Assembly Name="System.Web.Mvc" #>
<#@ assembly name="$(SolutionDir)MyProject.WebApplication\bin\MyProject.WebApplication.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>