private void InitializeProjection() { var projectionData = _projectionStore.Retrieve(Guid.Empty, InventoryProjection.ProjectionType); if (string.IsNullOrEmpty(projectionData)) { _projection = new InventoryProjection(); } else { _projection = JsonConvert.DeserializeObject <InventoryProjection>(projectionData); } }
// public static method we call on startup to setup our simple console environment and to wire things up public static ConsoleEnvironment BuildEnvironment() { // a little bit of our simple infrastructure in here // this infrastructure binds our simple in-memory EventStore and multiple Projections to each other // E17 added the SynchronousEventHandler class to keep event handling simple without queues for now // this handler is now passed to our in-memory eventStore var eventHandlers = new SynchronousEventHandler(); var eventStore = new InMemoryStore(eventHandlers); var blueprints = new InMemoryBlueprintLibrary(); blueprints.Register("model-t", new CarPart("wheel", 4), new CarPart("engine", 1), new CarPart("chassis", 1)); // In non-demo environments we usually want Application Services decoupled from Projections // but we will not worry about that now for this simple example // Application Service (Command message handler) // get app service ready to respond to Command messages var factoryAppSvc = new FactoryApplicationService(eventStore, blueprints); // Projections (Event message handlers) // directly wire projections to the Event Handlers for now // (not using production-like queues to store the Events in for this simple example) // projections can also be thought of as almost another kind of Application Service // Application Services and Projections BOTH handle Messages, but // Projections just happen to subscribe & respond to "When..." Event messages ("eventHandlers"), // instead of "When..." Command messages var activeFactories = new ActiveFactoriesProjection(); eventHandlers.RegisterHandler(activeFactories); var workerRegistry = new WorkerRegistryProjection(); eventHandlers.RegisterHandler(workerRegistry); var inventory = new InventoryProjection(); eventHandlers.RegisterHandler(inventory); // setup Window size values for Console Window that is 60% of Max Possible Size int winWidth = (System.Console.LargestWindowWidth * 6 / 10); int winHeight = (System.Console.LargestWindowHeight * 6 / 10); // hack - for now, hard code "bigger" buffer than Window sizes above // keep horizontal buffer equal to width - to avoid horizontal scrolling int winBuffWidth = winWidth; int winBuffHeight = winHeight + 300; System.Console.SetBufferSize(winBuffWidth, winBuffHeight); // Buffer is bigger than Window so set the Window Size System.Console.SetWindowSize(winWidth, winHeight); // note that various tricks to center Console Window on launch // and to change to Font size were ugly (PInvoke, etc.) so left them out for now System.Console.Title = "Being The Worst Interactive Factory Shell"; return(new ConsoleEnvironment { Events = eventStore, FactoryAppService = factoryAppSvc, ActionHandlers = ConsoleActions.Actions, Blueprints = blueprints, ActiveFactories = activeFactories, WorkerRegistry = workerRegistry, Inventory = inventory }); }